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
基本上,它只检查数字是否为数值。 有人可以给我一个暗示吗
答案 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}$'