1

我正在处理一个查询,其中有一列帐号,我使用 CONCAT 语句对其进行格式化,以使数字为 1-11111 而不是 11111。

有一列包含先前的帐号,但是除非实际上存在先前的帐号,否则此值为 NULL。为了尝试仅格式化存在的帐号,我这样做了:

    IFNULL(CONCAT(LEFT(a.prior_acct, 1), '-', RIGHT(a.prior_acct, 5)), 0) AS prior_account

现在,这是正确地将那里的帐号格式化为 1-11111 格式。但是,NULL 字段返回的是连字符而不是 0(同样可以接受的是空格)。

我尝试在完整的 concat 语句周围添加一组额外的括号,看看这是否会消除连字符,但没有运气!

我错过了什么?蒂亚!

4

1 回答 1

3

您的查询应该按原样工作,除非您实际上将空字符串存储在 中prior_acct,而不是NULL.

SELECT IFNULL(CONCAT(LEFT('', 1),'-',RIGHT('', 5)),0); -- outputs -
SELECT IFNULL(CONCAT(LEFT(null, 1),'-',RIGHT(null, 5)),0); --outputs 0

NULL空字符串和相同的不是 Oracle 。如果您需要将空字符串视为null,则需要明确指定它。一种方法是

IFNULL(CONCAT(
IF(
  TRIM(LEFT('', 1))='',NULL, TRIM(LEFT('', 1))
  ),
 '-', RIGHT(a.prior_acct, 5)), 0) AS prior_account
于 2013-04-12T16:41:38.003 回答