【问题标题】:SQL reading numbers formatted "000 that is less than 100SQL 读取格式为“000 小于 100”的数字
【发布时间】:2021-11-04 12:57:35
【问题描述】:

我创建了一个新手 Access 程序并使用以下 SQL 来深入了解我的选择。设备编号范围为 000 - 5000。对于大于 099 的数字,一切正常,但我的搜索结果不会向下钻取到小于 100 的设备编号。如果我将 ((TBTask.EquipID) Like "*" &[Forms]![SEARCH]![SearchEquipment] & "*") 更改为 ((TBTask.EquipID)Like [Forms]![SEARCH]![SearchEquipment]),我可以向下钻取它但后来我失去了深入了解 WO 号码的能力。我知道问题是数字为 99 时的前导“0”,但我不知道如何解决它以实现这两个结果并使表格保持不变。

SELECT TBEquipment.[Equipment No], TBEquipment.[Equipment Name], TBTask.*
FROM TBEquipment INNER JOIN TBTask ON TBEquipment.[Equipment No] = TBTask.EquipID
WHERE (((TBTask.CLOSED) Like "*" & [Forms]![SEARCH]![SearchClosed] & "*" Or (TBTask.CLOSED) Is Null) 
AND ((TBTask.EquipID) Like "*" & [Forms]![SEARCH]![SearchEquipment] & "*") 
AND ((TBTask.ID) Like "*" & [Forms]![SEARCH]![SearchWO] & "*") 
AND ((TBTask.Opened) Like "*" & [Forms]![SEARCH]![SearchOpened] & "*") 
AND (((TBTask.Description) Like "*" & [Forms]![SEARCH]![SearchKeyword1] & "*" Or (TBTask.Description) Is Null) 
And ((TBTask.Description) Like "*" & [Forms]![SEARCH]![SearchKeyword2] & "*" Or (TBTask.Description) Is Null) 
And ((TBTask.Description) Like "*" & [Forms]![SEARCH]![SearchKeyword3] & "*" Or (TBTask.Description) Is Null) 
And ((TBTask.Description) Like "*" & [Forms]![SEARCH]![SearchKeyword4] & "*" Or (TBTask.Description) Is Null)) 
AND (((TBTask.Solution) Like "*" & [Forms]![SEARCH]![SearchKeyword5] & "*" Or (TBTask.Solution) Is Null) 
And ((TBTask.Solution) Like "*" & [Forms]![SEARCH]![SearchKeyword6] & "*" Or (TBTask.Solution) Is Null) 
And ((TBTask.Solution) Like "*" & [Forms]![SEARCH]![SearchKeyword7] & "*" Or (TBTask.Solution) Is Null) 
And ((TBTask.Solution) Like "*" & [Forms]![SEARCH]![SearchKeyword8] & "*" Or (TBTask.Solution) Is Null)) 
AND ((TBTask.PartsToOrder) Like "*" & [Forms]![SEARCH]![SearchParts] & "*" Or (TBTask.PartsToOrder) Is Null) 
AND ((TBTask.PartsRequest) Like "*" & [Forms]![SEARCH]![SearchPartsRequested] & "*") 
AND ((TBTask.PartsComplete) Like "*" & [Forms]![SEARCH]![SearchPartsOrdered] & "*") 
AND ((TBTask.Review) Like "*" & [Forms]![SEARCH]![SearchReview] & "*") 
AND ((TBTask.SafteyIssue) Like "*" & [Forms]![SEARCH]![SearchSafety] & "*") 
AND ((TBTask.Mgr_Approved) Like "*" & [Forms]![SEARCH]![SearchMgrAP] & "*") 
AND ((TBTask.Status) Like "*" & [Forms]![SEARCH]![SearchStatus] & "*")) 
OR (((Nz([Forms]![Search]![SearchWO],""))="") 
AND ((Nz([Forms]![Search]![SearchEquipment],""))="") 
AND ((Nz([Forms]![Search]![SearchOpened],""))="") 
AND ((Nz([Forms]![Search]![SearchClosed],""))="") 
AND ((Nz([Forms]![Search]![SearchKeyword1],""))="") 
AND ((Nz([Forms]![Search]![SearchKeyword2],""))="") 
AND ((Nz([Forms]![Search]![SearchKeyword3],""))="") 
AND ((Nz([Forms]![Search]![SearchKeyword4],""))="") 
AND ((Nz([Forms]![Search]![SearchKeyword5],""))="") 
AND ((Nz([Forms]![Search]![SearchKeyword6],""))="") 
AND ((Nz([Forms]![Search]![SearchKeyword7],""))="") 
AND ((Nz([Forms]![Search]![SearchKeyword8],""))="") 
AND ((Nz([Forms]![Search]![SearchParts],""))="") 
AND ((Nz([Forms]![Search]![SearchPartsRequested],""))="") 
AND ((Nz([Forms]![Search]![SearchPartsOrdered],""))="") 
AND ((Nz([Forms]![Search]![SearchReview],""))="") 
AND ((Nz([Forms]![Search]![SearchSafety],""))="") 
AND ((Nz([Forms]![Search]![SearchMgrAP],""))="") 
AND ((Nz([Forms]![Search]![SearchStatus],""))=""))

ORDER BY TBTask.CLOSED DESC;

编辑:固定格式

【问题讨论】:

  • 您使用的是哪个 dbms? (上面的 SQL 是特定于产品的。)
  • 简化!向我们展示一些示例表数据和预期结果 - 全部为格式化文本(不是图像)。minimal reproducible example
  • Access 365,“MS Access 365 中的 SQL 语句”。所以我的问题是,当我尝试深入了解以 0 或 00 开头的 WO 时,我没有得到任何结果。如果我深入了解 WO 的 100 或更高,一切似乎都很好。看起来我有一个问题,包括我的声明中的前导零。处理示例
  • 示例 A) 当我使用 "((TBTask.EquipID) Like [Forms]![SEARCH]![SearchEquipment])" 查询 000 时的结果 ID EquipID 描述 400 000 文本 0a 401 000 文本 0b 406 101 文本 101a - 示例 B) 当我使用 "((TBTask.EquipID) Like "" & [Forms]![SEARCH]![SearchEquipment] & "")" ID EquipID 描述查询 000 时的结果400 000 文本 0a 401 000 文本 0b - 参考 org SQL 语句和示例 BI 可以向下钻取,但是当我尝试搜索的第二部分时“((TBTask.ID)像“”和 [Forms] ![SEARCH]![SearchWO] & "")" 没有选择相关的设备不我什么都得不到
  • 听起来真正的问题是将数字存储为字符串,并且在排序时他的行为很奇怪

标签: sql ms-access format


【解决方案1】:

SQL reading numbers formatted "000 that is less than 100

我认为问题出在自动类型转换发生:您的代码使用“099”(字符串)和“99”(来自数字 99 的字符串),两者都被认为是不同的。字符串“099”(和类似的)很可能在表达式的某个点变成数字 99,因为 Access 和 VBA 静默执行类型转换。

要解决这个问题,您可以使用函数 CDbl() 将所有这些类型的信息转换为数字,除非您希望“0”不同于“00”和“000”。另一种解决方案是确保字符串在某些时候不会自动转换为数字:您可以使用函数 Cstr() 确保字符串变量不会变成数字。 更多信息在lightningguide.net

【讨论】:

  • 谢谢,这确实有效,但我发现问题的根源是我在字符串中使用了通配符。问题由解决
  • 谢谢,这实际上是一个备份计划,但我发现我可以通过在我的 sql 字符串中删除通配符来获得我想要的结果,因为 "SearchWO" 与 "SearchEquipment" 结婚了。更改自:AND ((TBTask.EquipID) Like "" & [Forms]![SEARCH]![SearchEquipment] & "") AND ((TBTask.ID) Like "" & [Forms]![SEARCH]![SearchWO] & "") 更改为:AND ((TBTask.EquipID) Like Forms![Search].SearchEquipment OR Forms![Search].SearchEquipment IS NULL) AND ( (TBTask.ID) Like Forms![Search].SearchWO OR Forms![Search].SearchWO IS NULL)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-04-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-07-05
  • 1970-01-01
相关资源
最近更新 更多