2012-01-18 16 views
13

विवरण स्ट्रिंग पर:MySQL, IFNULL(), COALSESCE() की जगह नहीं

मेरे बयान साथ 'कोई नाम' हर खाली title_column बदलना चाहिए, लेकिन यह नहीं करता है:

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

IFNULL() वैसे ही व्यवहार करता है।

मैं क्या गलत कर रहा हूं?

+3

क्या आप शून्य मानों के बजाय खाली स्ट्रिंग मान देख रहे हैं? – Ilion

+0

जाहिर है, यह मामला है। और एक अन्य उपयोगकर्ता ने समाधान पोस्ट किया ... – kiltek

उत्तर

21

COALESCE और IFNULL विकल्प केवल NULL मूल्यों, अपनी तालिका खाली स्ट्रिंग से युक्त करने लगते हैं:

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

MySQL में एक NULL स्ट्रिंग और एक खाली ('') स्ट्रिंग एक ही बात नहीं कर रहे हैं।

आप कुछ ही विकल्प हैं, स्थिरता के लिए मैं मामले का उपयोग करें ...

CASE WHEN main_table.title_column = '' THEN 'no name' ELSE main_table.title_column END 

अन्य विकल्प COALESCE हो सकता है (NULLIF()) एक और उत्तर (जो NULLIF का उपयोग करता है पर दिखाया() खाली चालू करने के लिए एनयूएलएल में स्ट्रिंग्स और उसके बाद कोलेसस का उपयोग करता है जैसा आप चाहते थे)

या संभवतः सिर्फ IIF() छोटा करने के लिए मामला बयान ...

IIF(main_table.title_column = '', 'no name', main_table.title_column) 
1

MySQL के लिए इस समाधान के लिए इस्तेमाल किया,

SELECT IF((TRIM(main_table.title_column) = ''),'no name', COALESCE(main_table.title_column, 'no name')) AS title FROM main_table 
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