2012-04-26 43 views
1

我想使用CASE語句來檢查一個有條件的參數,如if parameter is an empty string I want to return Nil if not then string 'test',但這不起作用。此外,我不希望使用COALESCE在select子句中使用case?

select TEST=CASE '' WHEN '' THEN 'Nil' ELSE 'Test' END,current_timestamp from sysibm.sysdummy1; 

我得到一個錯誤

SQL狀態:42601 供應商代碼:-104 消息:[SQL0104]令牌=無效。有效令牌:+ - AS。原因。 。 。 。 。 :在標記=時檢測到語法錯誤。令牌=不是有效的令牌。有效令牌的部分列表是+ - AS。此列表假定該聲明在令牌之前是正確的。該錯誤可能在語句中更早,但該語句的語法在此之前似乎是有效的。恢復。 。 。 :執行以下一項或多項操作並再次嘗試請求: - 驗證token =區域中的SQL語句。糾正陳述。錯誤可能是一個缺少逗號或引號,可能是拼錯的單詞,或者它可能與子句的順序有關。 - 如果錯誤標記爲,更正SQL語句,因爲它不以有效的子句結束。

+0

雖然我承認[約束寫作(http://en.wikipedia.org/wiki/Constrained_writing)可以是一個美妙過去的時間,你有避免'COALESCE()'的理由嗎? – onedaywhen 2012-04-26 09:58:45

+0

@onedaywhen我有一個水晶報表參數傳遞給我的查詢,該參數可能是空的或以其他方式。如果我沒有錯,那麼COALESCE在數據庫列上工作,所以是受限制的寫作有時會工作;),你能用COALESCE使用參數重現我的查詢嗎?達米安。 – 2012-04-26 11:12:34

+0

因爲我做了Crystal和DB2,所以答案肯定不是! – onedaywhen 2012-04-26 13:26:01

回答

1
select CASE '' WHEN '' THEN 'Nil' ELSE 'Test' END as TEST,current_timestamp from sysibm.sysdummy1; 

更換由預期列東西


欲瞭解更多信息,請檢查THIS

+1

@ aF。感謝您的鏈接。我通過稍後指定別名來工作。 – 2012-04-26 09:40:23

+0

@DamienJoe羅傑,回答更新:) – 2012-04-26 09:41:55

+0

你需要刪除一個選擇。 – 2012-04-26 11:13:16

0

你的情況下,語法不正確正確的是,

select TEST=CASE <fieldname> WHEN '' THEN 'Nil' ELSE 'Test' END,current_timestamp from sysibm.sysdummy1;