2012-04-02 63 views
0

我有這樣的選擇SQL if語句來解決問題

insert into test(t_name) 
(select users.first_name || '_' || users.last_name 
|| '_' || to_date($values.report_date, 'YYYY.MM.DD') 
from users where users.id = $session.user_id) 

像預想的那樣,只是我想它,如果users.first_name/users.last_name是空的,其工作和USER_ID = 0插入另一個字符串「管理員」否則我得到錯誤,因爲它違反列t_name上的非空約束。

任何建議表示讚賞。謝謝。如果你所提到的所有條件必須是真實或只是其中之一,從問題

insert into test (t_name) 
select case 
     when users.first_name is null and users.last_name is null and users.id=0 then 'admin' 
     else users.first_name || '_' || users.last_name || '_' || to_date($values.report_date,'YYYY.MM.DD') 
     end 
from users 
where users.id = $session.user_id 

目前還不清楚(我):

回答

3

在SELECT部分​​使用CASE。根據您的需要,您應該在第一個WHEN部分中將AND s更改爲OR s。

(請注意,有沒有必要封閉SELECT在()INSERT ... SELECT語句)如果你正在使用MySQL,你可以使用IFNULL

1

INSERT INTO test(t_name) 
(
    SELECT IFNULL(users.first_name || '_' || users.last_name || '_' || to_date($values.report_date, 'YYYY.MM.DD'), 'admin') 
    FROM users 
    WHERE users.id = $session.user_id 
) 

在MSSQL中有一個類似的ISNULL函數,我假設也有其他數據庫系統的解決方案。

+0

我試過上面的解決方案,它的工作。儘管如此,你的時間+1。 – Fofole 2012-04-02 08:21:25