值范围的 Teradata LIKE -(正则表达式?)
Teradata LIKE for range for values - (regular expression?)
在 Teradata 中,我需要一个条件 select 仅记录:
- 从 0 到 4 之间的数字开始
- 后跟字符串 ABCD
- 后跟任何东西
我可以使用 substring 并且它有效。但这不是一段很好的代码。
SELECT
'4ABCDXXX' AS T
, CASE WHEN
Cast (Substring (T, 1,1) AS SMALLINT) BETWEEN 0 AND 4
AND Substring (T, 2,4) = 'ABCD'
THEN 'OK' ELSE 'NOK' END
我试过了
LIKE '[0-4]ABCD%'
但这似乎不起作用...
如何优雅地实现?
谢谢。
我认为 Teradata 不支持您尝试的增强 LIKE
语法。但是,代替这个,我们可以使用 REGEXP_SIMILAR
:
SELECT
'4ABCDXXX' AS T,
CASE WHEN REGEXP_SIMILAR('4ABCDXXX', '^[0-4]ABCD.*$', 'c')
THEN 'OK' ELSE 'NOK' END AS label
FROM yourTable;
我从来没有能够在 Teradata 中进行负面前瞻,所以我会使用两个测试:
select
'4ABCD123' as t,
case when
regexp_similar(t,'^[0-4]ABCD') = 1 -- starts with 0-4 followed by ABCD
and t like '%ABCD' -- does not end with ABCD
then 'nok' else 'ok' end,
在 Teradata 中,我需要一个条件 select 仅记录:
- 从 0 到 4 之间的数字开始
- 后跟字符串 ABCD
- 后跟任何东西
我可以使用 substring 并且它有效。但这不是一段很好的代码。
SELECT
'4ABCDXXX' AS T
, CASE WHEN
Cast (Substring (T, 1,1) AS SMALLINT) BETWEEN 0 AND 4
AND Substring (T, 2,4) = 'ABCD'
THEN 'OK' ELSE 'NOK' END
我试过了
LIKE '[0-4]ABCD%'
但这似乎不起作用...
如何优雅地实现?
谢谢。
我认为 Teradata 不支持您尝试的增强 LIKE
语法。但是,代替这个,我们可以使用 REGEXP_SIMILAR
:
SELECT
'4ABCDXXX' AS T,
CASE WHEN REGEXP_SIMILAR('4ABCDXXX', '^[0-4]ABCD.*$', 'c')
THEN 'OK' ELSE 'NOK' END AS label
FROM yourTable;
我从来没有能够在 Teradata 中进行负面前瞻,所以我会使用两个测试:
select
'4ABCD123' as t,
case when
regexp_similar(t,'^[0-4]ABCD') = 1 -- starts with 0-4 followed by ABCD
and t like '%ABCD' -- does not end with ABCD
then 'nok' else 'ok' end,