【发布时间】:2011-04-03 08:21:08
【问题描述】:
o我有一个包含大约 1000 万条记录的 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 不行……
【问题讨论】:
-
请提供一些例子。你的意思是你有这样的数据? 123abc456 那你叫数字id字段吗?
标签: sql types filtering teradata