如何使用Teradata SQL检查字段是否包含所有数值?

时间:2016-10-19 14:32:07

标签: teradata

我正在寻找一个与Teradata SQL的T-SQL类似的ISNUMERIC()函数。如果字符类型字段中包含的数据都是数字,我想要一个返回布尔值(或数字1/0)的简单方法。

例如:

我的专栏包含以下记录:'001''ABC'

我希望查询返回: 1(或True) 0(或False)

是否存在类似于TD原生支持的ISNUMERIC()的方法?我找到了一些我可以使用的正则表达式的选项,但是想要在沿着那条路走下去之前看看是否有一个更简单的方法。如果这种方法不存在,我愿意接受有关实现这一目标的建议。

2 个答案:

答案 0 :(得分:6)

TD15.10支持TRYCAST('ABC' AS INT),当转换失败时返回NULL。

TO_NUMBER('ABC')也会为坏数据返回NULL。

对于像''这样的字符串有一些区别。或者'。':TRYCAST('' AS INT)返回0TO_NUMBER('')返回NULL

-/:之类的分隔符也是如此,trycastto_number忽略了TryCast('05-075' AS INT) {}返回5075TO_NUMBER返回NULL {1}}

您可以根据它编写CASE并将其放在SQL UDF中。

答案 1 :(得分:0)

这并不总是有效。请检查以下示例:

SEL TryCast('12-31-2018' AS INT) -- Result: 12312018
SEL TryCast('05-075' AS INT) -- Result: 5075
SEL TryCast('075+' AS INT) -- Result: 75
SEL TryCast('/099' AS INT) -- Result: 99
SEL TryCast('55/55' AS INT) -- Result: 5555

推荐:

REGEXP_SIMILAR(TRIM(Value), '^[0-9]{14}$') = 1