Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/google-sheets/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 如果至少存在一个字符,如何将状态更新为错误的数字?_Sql_Tsql_Stored Procedures_Sql Server 2012_Sql Function - Fatal编程技术网

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

Sql 如果至少存在一个字符,如何将状态更新为错误的数字?,sql,tsql,stored-procedures,sql-server-2012,sql-function,Sql,Tsql,Stored Procedures,Sql Server 2012,Sql Function,我在SQL server 2012上工作,遇到问题,只有当整个字段只有0到9的数字时,我才能将状态更新为数字。 但如果它只有一个字符或精度,那么它将无效 1222有效 223g无效 create table #acceptnumbersOnly ( KeyValue nvarchar(50), Status nvarchar(50) ) insert into #acceptnumbersOnly(KeyValue) values ('233'), ('g25k'), ('25k'), ('g

我在SQL server 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+中引入的。我认为情况是这样的……When是一个更好的解决方案,因为它可以跨所有版本的SQL Server移植。也许这是一个没有实际意义的问题,因为可能没有太多人在使用2012年以前的SQL Server。

在您所有的研究和尝试中,您是否偶然发现了类似“%$0-9]”这样的
?可能是使用
!=''?并且
不为空
?或者是因为您找不到
update
?您的答案如何处理“但如果它只有一个字符或精度,那么它将无效”?这是什么意思?该语句说“如果KeyValue列中存在除0、1、2、…、9以外的任何字符,则状态设置为“仅限无效数字”。字符串“45.5”的计算结果为TRUE,因为它包含一个点。“不在需求文档部分中”但是如果它只有一个字符或精度,那么它将无效“意味着
'½'
'7'
将无效”,因为“如果它只有一个字符”?您的语句将把
'7'
视为有效。我仍然不知道无效的“精度”是什么样子,或者它是否由“一”限定。(这需要额外的工作来帮助a。)它产生所要求的结果,不是吗?也许需求文件部分的意思是“½”和“7”(加在一起,即“7½”)将无效。如果是这样,那么代码将演示我认为它是+1的要求,以提供选择。是的,IIF因其在Access中的早期可用性而受到污名。对我来说,它更正式一点,因为它要求提供ELSE条件。在数字不可为空列中,如果有人在大小写逻辑中省略ELSE 0它可能会在某个时候引起问题。它在功能上是等效的,所以无论人们对它最满意,它对他们都是最好的。