值范围的 Teradata LIKE -(正则表达式?)

Teradata LIKE for range for values - (regular expression?)

在 Teradata 中,我需要一个条件 select 仅记录:

我可以使用 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,