如何查看 DB2 SQL 查询中的文本字段是否为非数字?
我在表中有一个文本字段列,我只想查询 100% 数字的行。
假设该字段长 10 位(如我的),这将是解决方案。
WHERE
(
SUBSTRING(ID_NUM,1,1,OCTETS) BETWEEN '0' AND '9'
OR SUBSTRING(ID_NUM,2,1,OCTETS) BETWEEN '0' AND '9'
OR SUBSTRING(ID_NUM,3,1,OCTETS) BETWEEN '0' AND '9'
OR SUBSTRING(ID_NUM,4,1,OCTETS) BETWEEN '0' AND '9'
OR SUBSTRING(ID_NUM,5,1,OCTETS) BETWEEN '0' AND '9'
OR SUBSTRING(ID_NUM,6,1,OCTETS) BETWEEN '0' AND '9'
OR SUBSTRING(ID_NUM,7,1,OCTETS) BETWEEN '0' AND '9'
OR SUBSTRING(ID_NUM,8,1,OCTETS) BETWEEN '0' AND '9'
OR SUBSTRING(ID_NUM,9,1,OCTETS) BETWEEN '0' AND '9'
OR SUBSTRING(ID_NUM,10,1,OCTETS)BETWEEN '0' AND '9'
)
来自: http ://db2portal.blogspot.com.es/2006/03/returning-only-numeric-data.html的智能解决方案:
SELECT *
FROM TABLENAME
WHERE UCASE(VAR) = LCASE(VAR);
(您还应该检查不包含特殊字符,如-
, .
, (
, ... )
另一个:
SELECT *
FROM TABLENAME
WHERE TRANSLATE(VAR4,'##########','1234567890') = '####'
;
对我来说最好的:
SELECT *
FROM Table
WHERE TRANSLATE(Field,
' ',
'0123456789,. '
) = ''
AND Field <> ''
我发现此查询可以更好地识别非数字列。
select a.* from table a where (substring(testcol,1,1)
not in ('1','2','3','4','5','6','7','8','9','0')
or substring(testcol,2,1) not in ('1','2','3','4','5','6','7','8','9','0')
or substring(testcol ,3,1) not in ('1','2','3','4','5','6','7','8','9','0')
or substring(testcol,4,1) not in ('1','2','3','4','5','6','7','8','9','0')
or substring(testcol,5,1) not in ('1','2','3','4','5','6','7','8','9','0')
or substring(testcol,6,1) not in ('1','2','3','4','5','6','7','8','9','0')
or substring(testcol,7,1) not in ('1','2','3','4','5','6','7','8','9','0')
or substring(testcol ,8,1) not in ('1','2','3','4','5','6','7','8','9','0'))
从 mytable 中选择 myfield where isumeric(myfield)