Sql Sybase到Teradata查询,如';[0-9]'; 案例 当类似于“[0-9][0-9][0-9][0-9][0-9][0-9]”时,则子字符串(,1,3) 其他'000' 结束

Sql Sybase到Teradata查询,如';[0-9]'; 案例 当类似于“[0-9][0-9][0-9][0-9][0-9][0-9]”时,则子字符串(,1,3) 其他'000' 结束,sql,regex,teradata,database-migration,Sql,Regex,Teradata,Database Migration,我们正在做一个从Sybase到Teradata的迁移项目,但在解决这个问题时遇到了一个问题:)我对Teradata还是新手 我想问一下这方面的等效TD代码- 例如“[0-9][0-9][0-9][0-9][0-9][0-9][0-9]”到Teradata 基本上,它只是检查数字是否为数值。 有人能给我一个提示吗?你需要使用regexp而不是像那样的,因为[0-9][0-9][0-9][0-9][0-9][0-9]是一个正则表达式 要进行精确匹配,需要添加锚。即,匹配包含精确6位字符的字符串 CA

我们正在做一个从Sybase到Teradata的迁移项目,但在解决这个问题时遇到了一个问题:)我对Teradata还是新手

我想问一下这方面的等效TD代码- 例如“[0-9][0-9][0-9][0-9][0-9][0-9][0-9]”到Teradata

基本上,它只是检查数字是否为数值。
有人能给我一个提示吗?

你需要使用
regexp
而不是像
那样的
,因为
[0-9][0-9][0-9][0-9][0-9][0-9]
是一个正则表达式

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

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


由于
[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]
是一个正则表达式,因此需要使用
而不是像
那样的

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

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


由于
[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]
是一个正则表达式,因此需要使用
而不是像
那样的

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

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


由于
[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]
是一个正则表达式,因此需要使用
而不是像
那样的

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

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


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

regexp '^[[:digit:]]{6}$'
这将查找前三位数字,然后对后面的三位数字进行前瞻,而不将它们添加到整体匹配中

^
表示字符串的开头,结尾是“$”,因此在六位数字之前或之后没有其他字符
(?=…)
是一种所谓的“前瞻”,即这三个数字被选中,但被忽略


如果不匹配,regex返回的
NULL
将更改为“000”。

您也可以使用REGEXP\u SUBSTR直接提取三位数字:

regexp '^[[:digit:]]{6}$'
这将查找前三位数字,然后对后面的三位数字进行前瞻,而不将它们添加到整体匹配中

^
表示字符串的开头,结尾是“$”,因此在六位数字之前或之后没有其他字符
(?=…)
是一种所谓的“前瞻”,即这三个数字被选中,但被忽略


如果不匹配,regex返回的
NULL
将更改为“000”。

您也可以使用REGEXP\u SUBSTR直接提取三位数字:

regexp '^[[:digit:]]{6}$'
这将查找前三位数字,然后对后面的三位数字进行前瞻,而不将它们添加到整体匹配中

^
表示字符串的开头,结尾是“$”,因此在六位数字之前或之后没有其他字符
(?=…)
是一种所谓的“前瞻”,即这三个数字被选中,但被忽略


如果不匹配,regex返回的
NULL
将更改为“000”。

您也可以使用REGEXP\u SUBSTR直接提取三位数字:

regexp '^[[:digit:]]{6}$'
这将查找前三位数字,然后对后面的三位数字进行前瞻,而不将它们添加到整体匹配中

^
表示字符串的开头,结尾是“$”,因此在六位数字之前或之后没有其他字符
(?=…)
是一种所谓的“前瞻”,即这三个数字被选中,但被忽略


如果不匹配,正则表达式返回的
NULL
将更改为“000”。

必须是6位数字。Teradata是否有regexp?必须是6位数字。Teradata是否有regexp?必须是6位数字。Teradata是否有regexp?必须是6位数字。Teradata有regexp吗?谢谢!是的,这似乎是最有效的方法。顺便问一下,我想问一下,^、、和$是什么意思?谢谢!是的,这似乎是最有效的方法。顺便问一下,我想问一下,^、、和$是什么意思?谢谢!是的,这似乎是最有效的方法。顺便问一下,我想问一下,^、、和$是什么意思?谢谢!是的,这似乎是最有效的方法。顺便问一下,我想问一下,^、、和$是什么意思?