MySQL COALESCE函数无法返回非null值

时间:2015-11-03 03:42:07

标签: mysql

我有这个非常简单的MySQL查询:

SELECT m.REF_DATA_ID, COALESCE(m.SQL_FUNCTION, m.PHP_FUNCTION ) AS FUNCTION FROM AAB_REFERENCE_DATA_MANAGER m;

返回以下数据:

REF_DATA_ID | FUNCTION
88295       |
88296       |
88297       |
88298       | now()
88299       |
88300       | now()
88301       |

当我运行以下查询时,由于某些原因,COALESCE()似乎在我的查询中无法正常运行:

SELECT m.REF_DATA_ID, m.SQL_FUNCTION, m.PHP_FUNCTION FROM AAB_REFERENCE_DATA_MANAGER m;

返回:

REF_DATA_ID  SQL_FUNCTION  PHP_FUNCTION
88295       |             |
88296       |             |
88297       |             |
88298       | now()       |
88299       |             | get_session_user_id
88300       | now()       |
88301       |             | get_session_user_id

我只是不确定我在COALESCE做错了什么......

我正在寻找的输出是:

REF_DATA_ID  FUNCTION
88295       |        
88296       |        
88297       |        
88298       | now()  
88299       | get_session_user_id
88300       | now()
88301       | get_session_user_id

2 个答案:

答案 0 :(得分:1)

空白字符串不是NULL(Oracle除外)。因此,更明确的比较:

SELECT m.REF_DATA_ID,
       (CASE WHEN m.SQL_FUNCTION IS NULL OR
                  TRIM(m.SQL_FUNCTION) = ''
             THEN m.PHP_FUNCTION
             ELSE m.SQL_FUNCTION
        END) AS FUNCTION
FROM AAB_REFERENCE_DATA_MANAGER m;

答案 1 :(得分:0)

   SELECT m.REF_DATA_ID, 
          COALESCE(If(Length(m.SQL_FUNCTION)=0, NULL, m.SQL_FUNCTION),
                   If(Length(m.PHP_FUNCTION)=0, NULL, m.PHP_FUNCTION)) AS FUNCTION
   FROM AAB_REFERENCE_DATA_MANAGER m;