具有 6 个字符和通配符条件的 SQL 查询

问题描述

我一直在使用 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 *"))

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

enter image description here

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

enter image description here

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

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

其他正确的SYNOM是:

  1. 998877,029384
  2. 012310,123456

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

谢谢!

解决方法

我想你想要这样的东西:

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

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

这里的一个警告是空格。这将删除空格,假设它们只是空格。

,

我可能会提出以下建议:

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

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