[英]Search for multiple values in multiple columns in SQL
我的數據庫中有下表:
名 | 姓 |
---|---|
卡琳達 | 海姆斯 |
卡羅琳 | 格林伍德 |
亞倫 | 工作 |
米歇爾 | 尤爾卡 |
現在我想創建一個包含多個字符串的查詢,該查詢應該只返回包含該字符串的記錄。 例如,搜索ka
應返回Kalinda 、 Karolyn和Michel 。 這很簡單,我正在實現這一點
SELECT * FROM table WHERE firstName LIKE '%ka%' OR lastName LIKE '%ka'
現在,當我的搜索是ka he
時,如何創建查詢? 我希望只返回Kalinda和Michel ,因為ka
和he
都出現在他們的名字中。 我遇到的最大問題是值的數量是未知的。
實際上我正在使用 JPA,但歡迎任何幫助。
我嘗試了什么
我正在對每個值進行一次查詢,連接結果並刪除重復項。 但這讓我想起了卡琳達、卡羅琳和米歇爾。 卡羅琳不應該在那里,因為她的名字沒有he
的價值。 多個查詢也不是數據庫的最佳選擇......
一些答案后編輯
在查看了一些幫助我(希望)朝着正確方向前進的答案之后,我正在尋找一種替換|
AND
運算符的運算符:
SELECT * FROM table WHERE CONCAT(firstName, lastName) SIMILAR TO '%(he|ka)%'
因此,如果我的理解正確,您希望每個人的全名中都有兩個字符串。
這行得通嗎?
SELECT * FROM table WHERE firstName+' '+lastName LIKE '%ka%' AND firstName+' '+lastName LIKE '%he%'
對於PostgreSQL ,有一個很棒的特性叫做 .
簡單地說,您可以使用正則表達式模式搜索不同的鍵。 例如:
select * from table where firstName similar to '%(ka|he)%'
在您的情況下,您也可以查看lastName
因為您想同時搜索兩者。
因此,您可以檢查以下查詢和此 SQLFiddler 鏈接:
select * from mytable where lower(firstName) similar to '%(he|ka)%' OR lower(lastName) similar to '%(he|ka)%'
我終於能夠使用正則表達式和 PostgreSQL 的~
運算符找到解決方案:
SELECT * FROM table WHERE LOWER(CONCAT(firstName, ' ', lastName)) ~ '^(?=.*he)(?=.*ka).*$'
對於更多值,我只需將(?=.*value)
添加到正則表達式。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.