我有一个varchar字段,包含数字和日期作为字符串。我想更新此字段中大于720的所有数字。我首先尝试进行选择但是我收到此错误:
Conversion failed when converting the nvarchar value '16:00' to data type int.
这是我的疑问:
select id, case(isnumeric([other08])) when 1 then [other08] else 0 end
from CER where sourcecode like 'ANE%' --and other08 > 720
当我取消注释最后一部分时失败。
我试图让所有数字大于720,但我无法做到这一点。它在铸造和转换时也会失败。
感谢大家的帮助
答案 0 :(得分:7)
您还需要在WHERE子句中执行检查和转换:
SELECT
id,
CASE WHEN isnumeric([other08]) = 1 THEN CAST([other08] AS INT) ELSE 0 END
FROM CER
WHERE sourcecode LIKE 'ANE%'
AND CASE WHEN isnumeric([other08]) = 1 THEN CAST([other08] AS INT) ELSE 0 END > 720
答案 1 :(得分:2)
您需要在where子句中使用IsNumeric,以避免尝试将字符串与数字720进行比较。例如:
select id, case(isnumeric([other08])) when 1 then [other08] else 0 end
from CER
where sourcecode like 'ANE%' and ISNUMERIC(other08) = 1 and other08 > 720
修改
正如@Abs所指出的,上述方法不起作用。我们可以使用CTE来计算要过滤的可靠字段,但是:
WITH Data AS (
select id
, case WHEN isnumeric([other08]) THEN CAST([other08] AS int) else 0 end AS FilteredOther08
, CER.*
from CER
where sourcecode like 'ANE%'
)
SELECT *
FROM Data
WHERE [FilteredOther08] > 720