我正在进行一项查询,其中我有一列帐号,我使用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!
答案 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