我的语句应该用'no name'替换每个空的title_column
,但它没有达到效果:
SELECT COALESCE(main_table.title_column, 'no name') AS title
FROM main_table;
< p > IFNULL()
的行为方式相同。
我做错了什么?
COALESCE
和 IFNULL
仅替换 NULL
值,你的表中似乎包含空字符串:
SELECT
COALESCE(NULLIF(main_table.title_column, ''), 'no name') AS title
FROM main_table;
NULL
字符串和空字符串(''
)是不同的。CASE WHEN main_table.title_column = '' THEN 'no name' ELSE main_table.title_column END
其他选项可能是在另一个答案中展示的COALESCE(NULLIF())(它使用NULLIF()将空字符串转换为NULL,然后像您想要的那样使用coalesce)。
或者可能只需使用IIF()缩短CASE语句...
IIF(main_table.title_column = '', 'no name', main_table.title_column)
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
我在MySQL中使用了这个解决方案。
SELECT IF((TRIM(main_table.title_column) = ''),'no name', COALESCE(main_table.title_column, 'no name')) AS title FROM main_table