Create table temp
(
ID nvarchar(50)
)
ID包含在某些情况下通常为零的数值,因此它被定义为varchar
如何获取值从3555到3999和8000到9999开始。没有特定的规则,长度始终为4。 例如:
3555
35688888888888
3590909
8000
85805667
所有值都有效且将被提取。
请告诉我上述情况的T-SQL声明
答案 0 :(得分:6)
您可以使用LIKE
的少数表达式。如果您在ID
上有索引,它会使用它,因此效率很高。像这样:
SELECT
ID
FROM
temp
WHERE
ID LIKE '3[5-9]%'
OR ID LIKE '[89]%'
LIKE '3[5-9]%'
匹配以3
开头且第二个字符为5
或6
或7
或8
或{{ 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}的前四位数字的数字}。