如果至少存在字符,如何将状态更新为错误的数字?

问题描述

我在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

enter image description here

我一直认为IIF用于MS Access。我现在才发现有关IIF函数的信息。显然,IIF是在SQL Server 2012+中引入的。我认为Case ... When是一个更好的解决方案,因为它可以跨所有版本的SQL Server移植。也许这是有争议的,因为使用2012年前的SQL Server的人可能并不多。