私のステートメントは、すべての空 title_column
を「名前なし」に置き換える必要がありますが、そうではありません。
SELECT COALESCE(main_table.title_column, 'no name') AS title
FROM main_table;
IFNULL()
同じように動作します。
私は何を間違っているのですか?
COALESCE
値のみをIFNULL
置き換えるとNULL
、テーブルに空の文字列が含まれているように見えます。
SELECT
COALESCE(NULLIF(main_table.title_column, ''), 'no name') AS title
FROM main_table;
MySQLでは、NULL
文字列と空の(''
)文字列は同じものではありません。
一貫性を保つために、CASEを使用するいくつかのオプションがあります...
CASE WHEN main_table.title_column = '' THEN 'no name' ELSE main_table.title_column END
他のオプションは、別の回答に示されているCOALESCE(NULLIF())です(これは、NULLIF()を使用して空の文字列をNULLに変換し、必要に応じて合体を使用します)。
または、CASEステートメントを短縮するためのIIF()だけかもしれません...
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