-2
我應該按以下順序顯示:排序順序SQL
- 精確匹配應顯示第一
- 從文本字符串開始的部分匹配
- 部分匹配文本字符串中的任意位置**
如果用戶輸入搜索字符串 「漆」 結果應該是像 -
Paint Expense
Painting Supplies
Building Maintenance - Painting
任何幫助,將不勝感激。
我應該按以下順序顯示:排序順序SQL
如果用戶輸入搜索字符串 「漆」 結果應該是像 -
Paint Expense
Painting Supplies
Building Maintenance - Painting
任何幫助,將不勝感激。
這是SQL Server
但你可以簡單的將其更改爲PostrgeSQL
:
DECLARE @f VARCHAR(MAX) = 'paint'
DECLARE @t TABLE (v VARCHAR(MAX))
INSERT INTO @t
VALUES ('Building Maintenance - Painting'),
('Paint Expense'),
('Painting Supplies')
SELECT * ,
CASE WHEN (v LIKE @f + ' %'
OR v LIKE '% ' + @f
OR v LIKE '% ' + @f + ' %'
) THEN 1
WHEN v LIKE @f + '%' THEN 2
WHEN v LIKE '%' + @f + '%' THEN 3
ELSE 4
END AS ordering
FROM @t
ORDER BY ordering
輸出:
v ordering
Paint Expense 1
Painting Supplies 2
Building Maintenance - Painting 3
第一種是像'paint ...'
或'... paint'
或'... paint ...'
精確匹配。第二個:'paint...'
。第三個:'...paint...'
。
您也可以在order
條款直接做到這一點:
SELECT *
FROM @t
ORDER BY CASE WHEN (v LIKE @f + ' %'
OR v LIKE '% ' + @f
OR v LIKE '% ' + @f + ' %'
) THEN 1
WHEN v LIKE @f + '%' THEN 2
WHEN v LIKE '%' + @f + '%' THEN 3
ELSE 4
END
謝謝,請試試看:) – Abhijit
什麼是你的意圖表結構?你在用什麼語言?應該如何顯示結果(網頁/應用程序/無論)?你試過什麼了? – dhke
@dhke我爲此使用PHP。表結構很簡單,如id,account_number和account_name字段。當我輸入「paint」時,我有自動完成搜索框,它應該列出存儲在account_name字段中的3個以上的項目。 – Abhijit
嗨,這個問題不適合這個網站,因爲它沒有列出你在代碼中遇到的特定問題,也可能有其他人可能與他們有關。相反,它讀起來像是要求某人爲你寫一些代碼;它會作爲自由職業者網站上的工作規範工作,但您希望有人免費提供給您。 – IMSoP