3

我正在查询以查找以“ST”结尾的内容,后跟数字 1 - 999。

SELECT NUMBER WHERE NUMBER LIKE '%ST -- 可以正常返回以“ST”结尾的所有内容

SELECT NUMBER WHERE NUMBER LIKE '%[1-999] -- 可以正常返回以 1 - 999 结尾的所有内容

SELECT NUMBER WHERE NUMBER LIKE '%ST[1-999] -- 不起作用 - 不返回任何内容

还尝试过: SELECT NUMBER WHERE NUMBER LIKE '%ST%[1-999]-- 有效,但也返回诸如“GRASTNT3”之类的东西,在“ST”和数字之间有额外的东西

谁能帮助这个苦苦挣扎的初学者?

谢谢!

4

2 回答 2

2

问题是 [1-999] 并不意味着你认为它做了什么。

SQL Server 将其解释为一组值 (1-9, 9, 9),这基本上意味着如果 ST 之后的位数超过 1,则不会返回该条目。

据我所知,你最好的选择是:

SELECT NUMBER WHERE
    NUMBER LIKE '%ST[1-9][0-9][0-9]' OR 
    NUMBER LIKE '%ST[1-9][0-9]' OR 
    NUMBER LIKE '%ST[1-9]' 

(假设你的数字没有前导零 - 如果有,用更多的零替换那些)

于 2013-11-14T17:46:36.307 回答
0

你需要做

SELECT NUMBER WHERE
    NUMBER LIKE '%ST[1-9][0-9][0-9]'
    OR NUMBER LIKE '%ST[1-9][0-9]'
    OR NUMBER LIKE '%ST[1-9]';

the 中的组[]Char/NChar不是Int.


最好还是规范化并键入您的数据,这样您就有一个 STbit和一个int数字列。

如果您发现需要对可变字符串数据定义不同的过滤器,请考虑全文搜索或其他 Lucene 相关技术,具体取决于您的 RDBMS。

于 2013-11-14T17:45:06.643 回答