1

以下查询(精简)有一个字符串需要转换为整数,但并非该字段中的所有条目都有值。int 的 cast/case 在语句的 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语句时才会引发错误。

4

1 回答 1

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
于 2012-09-21T17:25:41.577 回答