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

How to update status to wrong numeric if at least on character exist?

我在 SQL 服务器 2012 上工作我有一个问题,只有当整个字段只有 0 到 9 的数字时,我才能将状态更新为数字。 但如果它只有一个字符或精度,那么它将无效。

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

我是伴随着案例长大的……逻辑。这对我有用。

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 服务器的所有版本移植。可能这是一个有争议的问题,因为可能没有太多人使用 2012 之前的 SQL 服务器。