是否有内置的DB2函数或任何查询来检查我的字符是否是数字? (我不能使用用户定义的函数)
答案 0 :(得分:25)
CASE
WHEN LENGTH(RTRIM(TRANSLATE(test_str, '*', ' 0123456789'))) = 0
THEN 'All digits'
ELSE 'No'
END
答案 1 :(得分:2)
有很多方法。仅使用两个函数来查看该解决方案:
CASE
WHEN REPLACE(TRANSLATE(test_str, '0','123456789','0'),'0','') = ''
THEN 'All digits'
ELSE 'Not all digits'
END
一般而言 - 功能较少 - 性能更佳:)
答案 2 :(得分:1)
答案 3 :(得分:1)
如果你的db2版本可以使用regexp_like,你可以这样做:
号码与"。"作为十进制符号:
select * from yourtable
where REGEXP_LIKE(trim(yourzone) , '^\d+(\.\d*)?$')
用","编号作为十进制符号:
select * from yourtable
where REGEXP_LIKE(trim(yourzone) , '^\d+(\,\d*)?$')
没有小数符号的数字(仅限整数,请问)
select * from yourtable
where REGEXP_LIKE(trim(yourzone) , '^\d+$')
答案 4 :(得分:0)
xQbert的答案并不完全正确。 你真正需要的是fromString中每个字符的*(并且需要删除空格),to字符串的长度需要与原始字符串的长度相同。
所以看起来像这样:
CASE
WHEN LENGTH(RTRIM(TRANSLATE(test_str, '**********', '0123456789'))) = LENGTH(RTRIM(test_str))
THEN 'All digits'
ELSE 'No'
END
答案 5 :(得分:0)
返回numeric,其中char字段是所有数字,没有前导或尾随空格。即;字段中的所有字符都是数字:
where translate(char_field, 'X ',' 0123456789') = ' '
返回非数字值,前导空格被视为非数字,但忽略尾随空格。即;如果有前导空格,则为非数字,但如果有尾随空格则不为数字。这对于加载大型机/ Cobol的字段很常见:
where not ( length(rtrim(translate(substr(char_field,1,length(rtrim(char_field))),' ','0123456789'))) = 0)
返回带尾随的数字,但不返回值之后的前导空格。即;前导空格被视为非数字,但忽略尾随空格。同样,对于大型机/ Cobol CHAR字段来说很常见:
where ( length(rtrim(translate(substr(char_field,1,length(rtrim(char_field))),'X ',' 0123456789'))) = 0)
返回带引号和数字的数字尾随空格。即;忽略确定字段中的前导和尾随空格是"数字":
where ( length(ltrim(rtrim(translate(substr(char_field,1,length(ltrim(rtrim(char_field)))),' ','0123456789')))) = 0)
答案 6 :(得分:0)
我基于xQbert暴露的想法制作了更容易出错的版本,添加了intermedia结果,一些示例和to_integer列将字符串值安全地转换为整数:
select
test_str
, TRIM(TRANSLATE(replace(trim(test_str), ' ', 'x'), ' ', '0123456789'))
, case when length(TRIM(TRANSLATE(replace(trim(test_str), ' ', 'x'), ' ', '0123456789')))=0
then cast(test_str as int) else null end to_integer
, case when length(TRIM(TRANSLATE(replace(trim(test_str), ' ', 'x'), ' ', '0123456789')))=0
then 'integer' else 'not integer' end is_integer
from (VALUES
(' 123 ' )
,(' abc ' )
,(' a12 ' )
,(' 12 3 ')
,(' 99.3 ')
,('993' )
) AS X(test_str)
;
此示例集的结果是:
TEST_STR 2 TO_INTEGER IS_INTEGER
-------- -------- ----------- -----------
123 123 integer
abc abc - not integer
a12 a - not integer
12 3 x - not integer
99.3 . - not integer
993 993 integer