例如我有一個表名爲TABLE
並且它具有命名FIELD
與值和的單個字段。運行此語句用戶定義會話變量()函數返回意想不到的結果
SELECT GROUP_CONCAT(`FIELD`)
INTO @LIST
FROM `TABLE`;
和
SELECT @LIST;
回報
1,2
然後我做一個IF()聲明
個SELECT IF (1 IN(@LIST),"TRUE","FALSE");
回報
TRUE
但當我運行這個
SELECT IF (2 IN(@LIST),"TRUE","FALSE");
返回
FALSE
讓我試試這個聲明一點點調試
SELECT IF (2 IN(1,2),"TRUE","FALSE");
,並返回我的預期值
TRUE
那麼,有沒有東西,我錯過了什麼?我需要它返回TRUE。
在你的語句,'@ LIST'實際上相當於一個字符串文字''1, 2''。但是它正在數值上下文中進行評估,MySQL正在評估它等於整數'1'。 (嘗試'SELECT @ LIST + 0'和'SELECT @ LIST + 4',看看返回的是什麼,所以,你的謂詞有效地是'SELECT 1 IN(1)'。在單引號中,'SELECT'1'IN '1,2')'結果將會有所不同**底線:**字符串內的**逗號**(不管字面量還是udv)是**不會被解釋爲SQL文本的一部分。你可以在字符串文字或udv上使用字符串比較函數,例如'FIND_IN_SET' – spencer7593 2014-09-25 03:48:26