数字范围的{T-SQL语句

时间:2017-03-07 10:48:04

标签: sql sql-server

Create table temp
(
ID nvarchar(50)
) 

ID包含在某些情况下通常为零的数值,因此它被定义为varchar

如何获取值从3555到3999和8000到9999开始。没有特定的规则,长度始终为4。 例如:

3555 
35688888888888
3590909

8000
85805667

所有值都有效且将被提取。

请告诉我上述情况的T-SQL声明

2 个答案:

答案 0 :(得分:6)

您可以使用LIKE的少数表达式。如果您在ID上有索引,它会使用它,因此效率很高。像这样:

SELECT
    ID
FROM
    temp
WHERE
    ID LIKE '3[5-9]%'
    OR ID LIKE '[89]%'

LIKE '3[5-9]%'匹配以3开头且第二个字符为5678或{{ 1}}。在这两个字符之后,可以有0个或更多其他字符。任意数量的额外字符。

9匹配以LIKE '[89]%'8开头的任何字符串以及之后的任何数字字符。

答案 1 :(得分:2)

您可以提取前四个字符,将其转换为数字并查询如下:

SELECT
  [ID]
FROM temp
WHERE convert(int,LEFT([ID],4)) BETWEEN 3500 AND 3999
OR convert(int,LEFT([ID],4)) BETWEEN 8000 AND 9999

对于大量数据,这将非常慢,因此如果您需要性能,我建议您在表中添加一个索引int列,其中存储代表{{1}的前四位数字的数字}。