说明
我的陈述应该用'无名'替换每个空 title_column,但它不会:
SELECT
COALESCE(main_table.title_column, 'no name') AS title
FROM main_table;
IFNULL()的行为方式相同。
我做错了什么?
答案 0 :(得分:22)
COALESCE
和IFNULL
仅替换NULL
个值,您的表似乎包含空字符串:
SELECT
COALESCE(NULLIF(main_table.title_column, ''), 'no name') AS title
FROM main_table;
答案 1 :(得分:4)
在MySQL中,NULL
字符串和空(''
)字符串不是一回事。
您有几个选项,为了保持一致性我使用CASE ...
CASE WHEN main_table.title_column = '' THEN 'no name' ELSE main_table.title_column END
其他选项可能是另一个答案上显示的COALESCE(NULLIF())(它使用NULLIF()将空字符串转换为NULL,然后根据需要使用合并)。
或者可能只是IIF()来缩短CASE声明......
IIF(main_table.title_column = '', 'no name', main_table.title_column)
答案 2 :(得分:2)
如果您更喜欢提供解决方案的功能性方法 你可以随时使用:
DELIMITER $$
-- --------------------------------------------------------------------------------
-- Routine DDL
-- --------------------------------------------------------------------------------
-- Note: add your server side comments to remember what this routine does on your Api
-- --------------------------------------------------------------------------------
DROP FUNCTION IF EXISTS `IfNullOrEmpty`$$
CREATE FUNCTION `IfNullOrEmpty`(s TEXT, value TEXT) RETURNS TEXT
NOT DETERMINISTIC
READS SQL DATA
BEGIN
IF ( (s is null) OR (trim(s) = '') ) THEN
return value;
END IF;
return s;
END$$
用法:
SELECT IfNullOrEmpty(t.FieldName,'No Name Given') as Name FROM cms_Table t
答案 3 :(得分:1)
将此解决方案用于MySql,
SELECT IF((TRIM(main_table.title_column) = ''),'no name', COALESCE(main_table.title_column, 'no name')) AS title FROM main_table