MySQL IFNULL CONCAT

时间:2013-04-12 16:34:28

标签: mysql

我正在进行一项查询,其中我有一列帐号,我使用CONCAT语句格式化数字1-11111而不是11111.

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

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

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

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

我错过了什么? TIA!

1 个答案:

答案 0 :(得分: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

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

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