问题描述
我在SQL Server 2012上工作,但有一个问题,只有当整个字段的数字都从0到9时,我才能将状态更新为Numbers。 但是如果它只有一个字符或精度,那么它将无效。
1222有效
223g无效
create table #acceptnumbersOnly
(
KeyValue nvarchar(50),Status nvarchar(50)
)
insert into #acceptnumbersOnly(KeyValue)
values
('233'),('g25k'),('25k'),('gkg'),('145'),('45.5')
预期结果将是:
KeyValue Status
233 Numbers only
g25k Not Valid Numbers Only
25k Not Valid Numbers Only
gkg Not Valid Numbers Only
145 Numbers only
45.5 Not Valid Numbers Only
解决方法
类似这样的东西
update #acceptnumbersOnly
set
[Status]=iif(KeyValue LIKE '%[^0-9]%','Not Valid Numbers Only','Numbers only');
结果
KeyValue Status
233 Numbers only
g25k Not Valid Numbers Only
25k Not Valid Numbers Only
gkg Not Valid Numbers Only
145 Numbers only
45.5 Not Valid Numbers Only
,
我从凯斯(Case)成长...当逻辑时。这对我有用。
SELECT KeyValue,CASE
WHEN KeyValue LIKE '%[^0-9]%' THEN 'Not Valid Numbers Only'
ELSE 'Numbers only'
END AS Status
FROM #acceptnumbersOnly
我一直认为IIF用于MS Access。我现在才发现有关IIF函数的信息。显然,IIF是在SQL Server 2012+中引入的。我认为Case ... When是一个更好的解决方案,因为它可以跨所有版本的SQL Server移植。也许这是有争议的,因为使用2012年前的SQL Server的人可能并不多。