1

在 SQL Server 中,我有一个包含数字的字符串列。我需要的每个条目只有一个数字,因此不需要解析。我需要一些方法来查找包含从 400 到 450 的数字的所有行。而不是这样做:

...where my stringcolumn like '%400%' or stringcolumn like '%401%' or stringcolumn like '%402%' or ...

有没有更好的方法可以节省一些打字?

这些行中还有其他值,例如:'5335154'、test4559@me.com'、'555-555-5555'。需要考虑将这些过滤掉。

4

4 回答 4

3
...where stringcolumn like '4[0-4][0-9]' OR stringcolumn = '450'

如果要限制为 3 位数字,则不需要通配符。

于 2012-08-07T18:27:48.993 回答
2

使用正则表达式来完成此操作。

...where stringcolumn like '4[0-4][0-9]' OR stringcolumn like '450'
于 2012-08-07T18:18:29.233 回答
0

单程

WHERE Column like '%4[0-4][09]%'
OR Column LIKE '%500%'

请记住,这将选择其中包含数字的任何内容,因此也会返回 5000

于 2012-08-07T18:20:00.613 回答
0

我会做以下事情:

select t.*
from (select t.*,
             (case when charindex('4', col) > 0
                   then substrint(col, charindex('4', col), charindex('4', col) + 2)
              end) as col4xx
      from t
     ) t
where (case when isnumeric(col4xx) = 1
            then (case when cast(col4xx as int) between 400 and 450 then 'true'
                  end)
       end) = 'true'

I'm not a fan of having case statements in WHERE clauses. However, to ensure conversion to a number, this is needed (or the conversion could become a column in another subquery). Note that the following is not equivalent:

where col4xx between '400' and '450'

Since the string '44A' would match.

于 2012-08-07T18:34:56.797 回答