如果至少存在一个字符,如何将状态更新为错误的数字?
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 服务器。
我在 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 服务器。