如何在 DB2 concat 函数中使用名为关键字的列

How to use a column named as keyword in a DB2 concat function

所以我得到了这个 table FOO,它有一个类型为 VARCHAR 的列,名为 COMMENT(恰好是一个保留关键字)。 当我试图在 select 的 CONCAT 函数中使用它时,结果为 NULL。

我该如何解决这个问题?

SELECT 
    CONCAT(CONCAT(CONCAT(CONCAT('{"NAME":"', NAME), '","COMMENT":"'), COMMENT),'"}')
FROM
    SOMESCHEMA.FOO

我也尝试在 COMMENT 周围使用 " 或 ',但随后它被解释为 VARCHAR...

第 2 次我使用了 ` 但这恰好打印出以下错误。

  1. [代码:-104,SQL 状态:42601] 非法符号“`”。一些可能合法的符号是:.

我还尝试在列前面添加 SCHEMA 和 TABLE 名称,例如:

CONCAT(CONCAT(CONCAT(CONCAT('{"NAME":"', NAME), '","COMMENT":"'), SOMESCHEMA.FOO.COMMENT),'"}')

但运气不好。

你试过吗?

SELECT CONCAT(CONCAT(CONCAT(CONCAT('{"NAME":"', NAME
                                  ), '","COMMENT":"'
                           ), "COMMENT"
                    ),
              '"}')
FROM SOMESCHEMA.FOO

也就是说,仅在列名称周围加上双引号。

我会发现使用中缀运算符更容易阅读:

SELECT '{"NAME":"' CONCAT NAME CONCAT '","COMMENT":"' CONCAT "COMMENT" CONCAT '"}'
FROM SOMESCHEMA.FOO

或:

SELECT '{"NAME":"' || NAME || '","COMMENT":"' || "COMMENT" || '"}'
FROM SOMESCHEMA.FOO

DB2 似乎也接受 ANSI/ISO SQL || 连接:

SELECT 
    '{"NAME":"' || NAME || '","COMMENT":"' || COMMENT || '"}'
FROM
    SOMESCHEMA.FOO