以下查询(精简版)有一个字符串需要强制转换为整数,但并非该字段中的所有条目都有值。 cast / case to int在语句的select部分工作正常,但在where语句中失败。我正在帮助一位同事并继续画一个空白,为什么这不起作用。有什么想法吗?
SELECT cast((case when item = ' ' then 0 else item end) as int) as newNumber
FROM tablename
WHERE cast(trim(case when item = ' ' then 0 else item end) as INT) < 600
这是错误
Invalid character found in a character string argument of the function DECFLOAT
仅在添加 WHERE 语句时抛出错误。
答案 0 :(得分:0)
WITH
Q1 (ITEM) AS
(VALUES ' ', '1', '2', '3', 'DFSDF', '601'),
Q2 (ITEM) AS
(SELECT INTEGER(CASE WHEN ITEM = ' ' THEN '0' ELSE ITEM END) AS NEWNUMBER
FROM Q1
WHERE TRIM(TRANSLATE(ITEM, '', '0123456789')) = '')
SELECT *
FROM Q2
WHERE Q2.ITEM < 600