【问题标题】:SQL Query with criteria of 6 chars and wildcards具有 6 个字符和通配符条件的 SQL 查询
【发布时间】:2023-03-19 05:20:02
【问题描述】:

我坚持使用 SQL 查询来获取我需要的内容。我的意见是这样的:

COD SINOM
A   123456
B   987654, 123456, 111111
C   123456 , 234501
D   9912345699
E   99123456, 789012
F   77123456

这两个字段都是 text 类型,即使它们是数字(我们使用文本类型,因为有时它有前导零)。 Mycriteria 是123456

我正在尝试查询 SINOM 包含我的条件的所有 COD,但仅作为 6 个字符在一个单词中。它是否有任何前导空格或逗号或分号都没有关系(所有这些都是可能的),但字符串的 len 必须是 6,并且可以是更多文本。条件可以在 SINOM 的左侧、右侧或中间。

我的实际查询是这样的:

SELECT Table1.cod, Table1.sinom
FROM Table1
WHERE (((Table1.sinom)="123456")) OR (((Table1.sinom) Like "*123456,*")) OR (((Table1.sinom) Like "*123456 *"))

但我得到的输出是错误的:

正确的只有前 3 行(A、B、C)。其余行是错误的。我的预期输出是:

991234569999123456, 78901277123456 错了,因为它包含 123456 但不是一个单词。

寻找一个 SQL 查询来应用它,并尽可能避免使用 VBA 函数

其他正确的同义词是:

  1. 998877, 123456, 029384
  2. 012310,123456

我希望这很清楚,但是如果有任何疑问,请不要犹豫。

谢谢!

【问题讨论】:

    标签: sql ms-access ms-access-2016


    【解决方案1】:

    我想你想要这样的东西:

    WHERE "," & REPLACE(Table1.sinom, " ", "") & ",") Like "*,123456,*"
    

    关键是查找分隔字符串——但要确保列的开头和结尾有逗号。

    这里需要注意的是空格。这会删除空格,假设它们只是空格。

    【讨论】:

    • 天啊,这个效果很好,我现在的查询是SELECT Table1.cod FROM Table1 WHERE "," & REPLACE(Table1.sinom, " ", "") & "," Like "*,123456,*";
    【解决方案2】:

    我可能会提出以下建议:

    select * from table1 where "," & table1.sinom & "," Like "*[!0-9]123456[!0-9]*"
    

    [!0-9] 的使用将说明数字值周围有任何分隔符的可能性,而用逗号连接(可以是任何非数字字符)说明数字单独出现或出现在字符串的开头或结尾。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-07-19
      • 2011-07-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多