在 Teradata 中使用 Case-When

Using Case-When in Teradata

简单的问题,但让我发疯了一段时间。在 Teradata 中有以下 table:

A       B
112211  
113311  56
226144  61
996688  66
005400  
771277 

对于 col-B 中的空白字段,需要从 col-A 中提取数字,例如:

SELECT A
CASE 'B'
WHEN 'B' IS NULL THEN SUBSTR('A',3,4)
END AS 'B'
FROM TABLE_T1;

参考了一些文档,但没有弄清楚上述查询中出了什么问题。此查询适用于 MySQL 但为什么不适用于 Teradata。

预期 O/P:

A       B
112211  22
113311  56
226144  61
996688  66
005400  54
771277  12

您可以使用这种形式的 case expression 注意区别是 case when ... 而不是 case b when ...。也仅对文字使用单引号,对标识使用双引号。 (注意你为什么使用单引号。)

SELECT
      A
    , CASE WHEN B IS NULL THEN SUBSTR(A,3,4) 
           ELSE B 
      END AS "B"
FROM TABLE_T1;

但我相信您也可以使用 coalesce()

SELECT
      A
    , coalesce(B ,SUBSTR(A,3,4) AS "B"
FROM TABLE_T1;