我正在寻找一个与Teradata SQL的T-SQL类似的ISNUMERIC()
函数。如果字符类型字段中包含的数据都是数字,我想要一个返回布尔值(或数字1/0)的简单方法。
例如:
我的专栏包含以下记录:'001'
和'ABC'
我希望查询返回: 1(或True)和 0(或False)。
是否存在类似于TD原生支持的ISNUMERIC()
的方法?我找到了一些我可以使用的正则表达式的选项,但是想要在沿着那条路走下去之前看看是否有一个更简单的方法。如果这种方法不存在,我愿意接受有关实现这一目标的建议。
答案 0 :(得分:6)
TD15.10支持TRYCAST('ABC' AS INT)
,当转换失败时返回NULL。
TO_NUMBER('ABC')
也会为坏数据返回NULL。
对于像''这样的字符串有一些区别。或者'。':TRYCAST('' AS INT)
返回0
,TO_NUMBER('')
返回NULL
。
-/:
之类的分隔符也是如此,trycast
但to_number
忽略了TryCast('05-075' AS INT)
{}返回5075
而TO_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