SQL Server 2016:数字通配符[^0-9]-筛选出0000
我使用一个通配符作为一个4字符的字段来过滤掉非数字的值,这可以正常工作,但是我也想过滤掉“0000”值。是否可以不使用“和/或”SQL Server 2016:数字通配符[^0-9]-筛选出0000,sql,sql-server,tsql,case,sql-server-2016,Sql,Sql Server,Tsql,Case,Sql Server 2016,我使用一个通配符作为一个4字符的字段来过滤掉非数字的值,这可以正常工作,但是我也想过滤掉“0000”值。是否可以不使用“和/或” 添加带有AND的额外参数 工作示例 SELECT CASE WHEN yourfield NOT LIKE '%[^0-9]%' AND yourfield != '0000' THEN 'xxx' ELSE NULL END FROM yourtable 输入 输出 xxx (null) (null) (null) xxx your
添加带有AND的额外参数 工作示例
SELECT CASE WHEN yourfield NOT LIKE '%[^0-9]%' AND yourfield != '0000'
THEN 'xxx'
ELSE NULL END
FROM yourtable
输入
输出
xxx
(null)
(null)
(null)
xxx
yourfield filtered
1234 xxx
abcd (null)
ab12 (null)
0000 (null)
9999 xxx
SQL Fiddle:
不需要和/或
输出
xxx
(null)
(null)
(null)
xxx
yourfield filtered
1234 xxx
abcd (null)
ab12 (null)
0000 (null)
9999 xxx
SQL FIDLE:使用AND添加额外参数 工作示例
SELECT CASE WHEN yourfield NOT LIKE '%[^0-9]%' AND yourfield != '0000'
THEN 'xxx'
ELSE NULL END
FROM yourtable
输入
输出
xxx
(null)
(null)
(null)
xxx
yourfield filtered
1234 xxx
abcd (null)
ab12 (null)
0000 (null)
9999 xxx
SQL Fiddle:
不需要和/或
输出
xxx
(null)
(null)
(null)
xxx
yourfield filtered
1234 xxx
abcd (null)
ab12 (null)
0000 (null)
9999 xxx
SQL FIDLE:这将为“0000”输出空值:
DECLARE @D VARCHAR(4) = '0000'
SELECT (CASE WHEN @D NOT LIKE '%[^0-9]%'
THEN CONVERT(INT, LEFT(NULLIF(@D, '0000'), 2))
ELSE NULL
END)
这将为“0000”输出空值:
DECLARE @D VARCHAR(4) = '0000'
SELECT (CASE WHEN @D NOT LIKE '%[^0-9]%'
THEN CONVERT(INT, LEFT(NULLIF(@D, '0000'), 2))
ELSE NULL
END)
您根本不需要LIKE或CASE:
编辑:
输出:
0000 NULL
1234 12
12ab NULL
您根本不需要LIKE或CASE:
编辑:
输出:
0000 NULL
1234 12
12ab NULL
有几件事需要注意:
1.ELSE NULL在CASE语句中是多余的;默认值为NULL
2.如果只返回两个正数,则不需要int;tinyint就可以了
以下是其他几种方法:
技术1
技术2
有几件事需要注意:
1.ELSE NULL在CASE语句中是多余的;默认值为NULL
2.如果只返回两个正数,则不需要int;tinyint就可以了
以下是其他几种方法:
技术1
技术2
标记您正在使用的dbms。该代码是特定于产品的。标记您正在使用的dbms。该代码是特定于产品的。谢谢您的回答。我希望找到一个通配符/正则表达式解决方案,而不必使用和/OR@Tsar添加了不需要和/或的其他答案。有趣的是,执行计划是相同的,我应该选择哪一个?@Tsar数据集有多大?500K行,每行执行两次检查-选择LEFT@D, 2 & RIGHT@D,谢谢你的回答。我希望找到一个通配符/正则表达式解决方案,而不必使用和/OR@Tsar添加了不需要和/或的其他答案。有趣的是,执行计划是相同的,我应该选择哪一个?@Tsar数据集有多大?500K行,每行执行两次检查-选择LEFT@D, 2 & RIGHT@D2.