o我有一个 teradata 表,其中包含大约 1000 万条记录,它将数字 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 不行...