SQL Server-在where子句中使用子字符串

时间:2019-05-15 22:52:27

标签: sql sql-server

我正在尝试提出一个查询,该查询将基于子字符串进行过滤。 如果我将substring用作select语句,则该子字符串操作可以正常工作,但是当我尝试使用它进行过滤时,效果不佳

-- These are some examples of the data I have
--cust_12
--cust_123
--temp_db
SELECT SUBSTRING(name,8,LEN(name)) AS ClientId, name FROM sys.databases
WHERE SUBSTRING(name,8,LEN(name)) IN ('12, 123');

如果我在不带where节的情况下运行查询,则可以正确解析数据,但是在使用where却没有结果的情况下

2 个答案:

答案 0 :(得分:4)

这是您想要的逻辑吗?

WHERE SUBSTRING(name, 8, LEN(name)) IN ('12', '123')

但是我想我会更倾向于这样写:

where name like '%[_]12'] or
      name like '%[_]123' 

我只是觉得目的更清楚。

答案 1 :(得分:1)

您的报价有误:

SELECT SUBSTRING(name,8,LEN(name)) AS ClientId, name FROM sys.databases
WHERE SUBSTRING(name,8,LEN(name)) IN ('12, 123');

应为:

SELECT SUBSTRING(name,8,LEN(name)) AS ClientId, name FROM sys.databases
WHERE SUBSTRING(name,8,LEN(name)) IN ('12', '123');