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

How do you check if a field contains all numeric values using Teradata SQL?

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

例如:

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

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

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

TD15.10 支持 TRYCAST('ABC' AS INT) 转换失败时 returns NULL。

TO_NUMBER('ABC') 也 returns NULL 表示错误数据。

'' 或 '.' 等字符串存在一些差异:TRYCAST('' AS INT) returns 0TO_NUMBER('') returns NULL .

对于像 -/: 这样的分隔符也是一样的,它们被 trycast 而不是 to_number 忽略:TryCast('05-075' AS INT) returns 5075TO_NUMBER returns NULL

您可以基于此编写 CASE 并将其放入 SQL UDF。

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

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