gpt4 book ai didi

sql - 如何过滤Teradata中文本字段中的非数字值?

转载 作者:行者123 更新时间:2023-12-04 14:19:41 24 4
gpt4 key购买 nike

我有一个包含约一千万条记录的Teradata表,该表将数字id字段存储为varchar。我需要将此字段中的值传输到另一个表的bigint列中,但是我不能简单地说cast(id_field as bigint),因为我得到了无效的字符错误。通过查看值,我发现字符串中的任何位置都可能有一个字符,所以假设字符串为varchar(18),我可以像这样过滤掉无效的行:

     where substr(id_field,1,1) not in (/*big,ugly array of non-numeric chars*/)
and substr(id_field,2,1) not in (/*big,ugly array of non-numeric chars*/)

etc, etc...

则转换就可以了,但是从长远来看这是不可行的。速度很慢,并且如果字符串包含18个可能的字符,则会使查询不可读。如果不单独检查每个字符是否包含非数字字符数组,该如何过滤出该字段中具有值的行,这些值将不会转换为bigint?

示例值将是
   123abc464
a2.3v65
a_356087
........
000000000
BOB KNIGHT
1235468099

这些值没有特定的模式,我只需要过滤掉包含任何非数字数据的模式即可。
123456789可以,但是123.abc_c3865不能...

最佳答案

从TD14开始,Teradata添加了一些功能,现在有多种方式,例如:

WHERE RTRIM(col, '0123456789') = ''

但是最简单的方法是TO_NUMBER,对于错误的数据返回NULL:
TO_NUMBER(col)

关于sql - 如何过滤Teradata中文本字段中的非数字值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3559698/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com