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

问题描述

我在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的人可能并不多。

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...