如何使用 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 0
和 TO_NUMBER('')
returns NULL
.
对于像 -/:
这样的分隔符也是一样的,它们被 trycast
而不是 to_number
忽略:TryCast('05-075' AS INT)
returns 5075
和 TO_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
我正在使用 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 0
和 TO_NUMBER('')
returns NULL
.
对于像 -/:
这样的分隔符也是一样的,它们被 trycast
而不是 to_number
忽略:TryCast('05-075' AS INT)
returns 5075
和 TO_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