微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

sql – 如何在teradata中的文本字段中过滤掉非数字值?

我有一个teradata表,其中有大约1000万条记录,它将数字id字段存储为varchar.我需要将此字段中的值传输到另一个表中的bigint列,但我不能简单地说cast(id_field为bigint)因为我得到了无效的字符错误.通过查看值,我发现字符串中的任何位置都可能有一个字符,所以让我们说字符串是varchar(18)我可以过滤掉无效的行,如下所示:
where substr(id_field,1,1) not in (/*big,ugly array of non-numeric chars*/)
     and substr(id_field,2,ugly array of non-numeric chars*/)

etc,etc...

演员会工作,但从长远来看这是不可行的.它很慢,如果字符串有18个可能的字符,它会使查询不可读.如何在不使用非数字字符数组单独检查每个字符的情况下过滤掉在此字段中具有值而不会作为bigint转换的行?

示例值将是

123abc464
   a2.3v65
   a_356087
   ........
   000000000
   BOB KNIGHT
   1235468099

值不遵循特定的模式,我只需要过滤掉包含任何非数字数据的值.
123456789没问题,但123.abc_c3865不是……

解决方法

我曾经管理的最好的是:
where char2hexint(upper(id_field)) = char2hexint(lower(id_field))

由于大写字符为小写字母赋予不同的十六进制值,这将确保您没有字母字符,但仍会留下下划线,冒号等.如果这不符合您的要求,您可能需要编写UDF.

原文地址:https://www.jb51.cc/mssql/74699.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐