Sybase向Teradata询问LIKE' [0-9]'

时间:2015-06-16 06:23:01

标签: sql regex teradata database-migration

CASE
         WHEN <in_data> LIKE '[0-9][0-9][0-9][0-9][0-9][0-9]' THEN SUBSTR(<in_data>,1,3)
ELSE '000'
END

我们正在进行从Sybase到Teradata的迁移项目,并且在解决这个问题时遇到了问题:)我还是Teradata的新手。

我想问一下相应的TD代码 - 喜欢&#39; [0-9] [0-9] [0-9] [0-9] [0-9] [0-9]&#39;到Teradata

基本上,它只检查数字是否为数值。 有人可以给我一个暗示吗

2 个答案:

答案 0 :(得分:3)

您还可以使用REGEXP_SUBSTR直接提取三位数字:

COALESCE(REGEXP_SUBSTR(in_data,'^[0-9]{3}(?=[0-9]{3}$)'), '000')

这会查找前三位数字,然后对三个后续数字进行预测,而不将它们添加到整体匹配中。

^表示字符串的开头,&#39; $&#39;最后,所以六位数之前或之后没有其他字符。 (?=...)是所谓的&#34; lookahead&#34;,即检查这三个数字,但忽略。

如果匹配不匹配,正则表达式会返回NULL,并更改为&#39; 000&#39;。

答案 1 :(得分:0)

您需要使用regexp代替like,因为[0-9][0-9][0-9][0-9][0-9][0-9]是正则表达式。

要进行完全匹配,您需要添加锚点。即匹配包含精确6位数字符的字符串。

regexp '^[0-9]{6}$'

regexp '^[[:digit:]]{6}$'