首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計綜合問答

MySQL 中 LENGTH 與 LIKE 組合查詢失效的正確寫法

     編輯:程式設計綜合問答

問題現象

單獨使用 LENGTH(x) = 5 或 x LIKE '%10%' 均能查到數據 "10001",但組合查詢:

SELECT * FROM table WHERE LENGTH(x = 5) AND x LIKE '%10%';

無法返回預期結果。

錯誤原因

LENGTH(x = 5) 邏輯錯誤:

  • x = 5 是布爾表達式,結果為 0 (false) 或 1 (true)
  • LENGTH(0) 或 LENGTH(1) 分別返回 1,永遠不等於 5
  • 導致條件恆為假,查無結果

正確寫法

SELECT * FROM table 
WHERE LENGTH(x) = 5 
  AND x LIKE '%10%';
  • LENGTH(x) 計算列 x 的字符串長度
  • = 5 作為長度比較條件
  • AND 組合模糊匹配條件

補充:字符長度 vs 字節長度

若 x 為 VARCHAR 存儲 UTF-8 中文,LENGTH('中文') = 6,CHAR_LENGTH('中文') = 2。按字符數過濾請用 CHAR_LENGTH。

性能提示

  • LIKE '%10%' 導致全表掃描,無法使用索引
  • 若頻繁查詢,考慮:
    • 全文索引 (FULLTEXT)
    • 將搜索關鍵詞拆分存儲
    • 使用 Elasticsearch 等專用搜索引擎

總結

問題核心在於 LENGTH(x = 5) 誤將比較表達式作為函數參數。正確寫法分離條件:LENGTH(x) = 5 AND x LIKE '%10%'。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved
函數含義適用場景
LENGTH(str)字節長度存儲空間計算、二進制數據
CHAR_LENGTH(str) / CHARACTER_LENGTH(str)字符長度多字節字符集(UTF-8)下的字符計數