14

私のステートメントは、すべての空 title_column「名前なし」に置き換える必要がありますが、そうではありません。

SELECT COALESCE(main_table.title_column, 'no name') AS title
FROM main_table;

IFNULL()同じように動作します。

私は何を間違っているのですか?

4

4 に答える 4

25

COALESCE値のみをIFNULL置き換えるとNULL、テーブルに空の文字列が含まれているように見えます。

SELECT
  COALESCE(NULLIF(main_table.title_column, ''), 'no name') AS title
FROM main_table;
于 2012-01-18T10:02:39.003 に答える
4

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)
于 2012-01-18T10:03:06.297 に答える
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
于 2013-04-05T14:55:29.623 に答える
1

MySqlにこのソリューションを使用しました。

SELECT IF((TRIM(main_table.title_column) = ''),'no name', COALESCE(main_table.title_column, 'no name')) AS title FROM main_table
于 2012-01-18T10:23:27.180 に答える