簡體   English   中英

SQL選擇在列中找到匹配值的位置

[英]SQL Select where found match value in column

是否可以從MySQL數據庫中檢索與字符串部分匹配的數據,而無需使用“ LIKE”? 例如,我有一列的值為“ 22,56,79,45,69”,並且我只想檢索不包含“ LIKE”條件的列值中數字“ 45”的行?

像這樣的事情:

SELECT * FROM Table_Name WHERE 45 is part of value in Column_Name   

有可能還是我必須使用“ LIKE”?

如果您無法更改架構,則LIKE運算符將是最簡單的方法。

SELECT * FROM Table_Name WHERE
Column_Name LIKE '45,%'      -- Starts with 45
OR Column_Name LIKE '%,45,%' -- 45 in the middle somewhere
OR Column_Name LIKE '%,45'   -- Ends with 45
OR Column_Name = '45';       -- 45 is the only item in the list

您也可以將其簡化為:

SELECT * FROM Table_Name WHERE concat(',',Column_Name,',') LIKE '%,45,%';

如果您的表很大,並且性能值得關注,我建議您不要使用這種方法。 MySql將無法利用索引。 相反,我建議規范化您的數據。 將每個值放在不同表的單獨行中,然后在該表上JOIN 這樣會更快。

要回答您的實際問題,即是否可以使用當前模式而不使用LIKE ,可以檢查Regexp運算符 但是,與使用LIKE相比,我並沒有什么不同。 它仍然必須解析表中的每個字符串。

如果逗號分隔列表中的項目少於100個,則可以使用CTE將其“展開”到表格中...

http://www.wisesoft.co.uk/scripts/t-sql_cte_split_string_function.aspx

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM