這是在MySQL(5.1.41 - 社區)中的錯誤 -IF(a.testcol IS NULL, '',a.testcol)IS NOT NULL不起作用
CREATE TEMPORARY TABLE zztest (stuff varchar(20) NULL)
INSERT INTO zztest
SELECT
'test'
FROM (
select '1' as testcol
union
select null
) a
WHERE **IF(a.testcol IS NULL,'',a.testcol)** IS NOT NULL
這是一個簡化查詢。 **之間的IF表達應該是粗體的。它來自動態查詢,其中IF表達式被無辜地放入查詢中。
選擇本身的作品。與插入語句結合使用時,它不起作用。內部選擇旨在顯示創建的臨時表在被檢查的列中可以具有空值。
這件事是通過用IFNULL代替IF(a.testool, '')
其他一些replacesments失敗過(而自己的選擇工作) 「固定」:
1 IF (a.testcol, '', a.testcol)
2 IF (a.testcol, '', '')
3 IF ('', '', '')
這個錯誤是否存在於其他版本的MySQL中?
編輯 - 與選擇查詢的結果:
消息:錯誤代碼:1292截斷不正確INTEGER值:「」
它應該具有的結果是兩個「測試」字符串輸入到zztest表中。
編輯 - 約2小時後我再次嘗試了。最後兩條語句「工作」(記住將它們插入上面的查詢中)。第一個替換聲明失敗。然後數字2和三再次失敗。
因此,它看起來像語句1是罪魁禍首(和原來的,它錯誤了現在..)..也許某種壞的狀態存在的地方,產生相同中間結果的語句也失敗。
因此,後續問題是 - 有沒有辦法確保查詢被重置?
就在我嘗試在新連接中執行查詢後,工作臺崩潰了..相關?
編輯 - 發現,有明確的轉換工作:
IF (a.testcol, cast('' as char), cast('' as char))
所以我發現我周圍的路。問題是 - 爲什麼「(將引號內的任何內容)解釋爲INTEGER?我甚至通過連接''將它解釋爲DOUBLE。
它爲什麼有時會工作,而不是其他人? < - 這部分吸吮的女僕。
它不起作用?會發生什麼,會發生什麼? – nos 2013-02-19 18:53:11