Postgresql
Postgres LIKE 語句可以返回完全匹配嗎?
我正在嘗試使用 LIKE 和 % 搜尋 Postgres 表,但查詢未返回結果。
該列
local_username
將包含格式如下的值:username@domain.local
ORusername@domain
。我的查詢是根據
username
域部分和域部分搜尋這一列。範例查詢如下:
SELECT * FROM users WHERE local_username LIKE 'username%' AND local_username LIKE '%domain%';
我擔心,因為查詢中域之後可能沒有字元,第二個 % 會導致它不返回任何結果,因為 % 會導致它搜尋更多字元,在上述情況下查詢不存在。
除了 LIKE 之外,我還應該使用其他關鍵字嗎?還是我需要檢查每種可能性(下面的範例)。
SELECT * FROM users WHERE local_username LIKE 'username%' AND (local_username LIKE '%domain%' OR local_username LIKE '%domain');
%
將匹配任何字元序列,包括 none。所以這是一場比賽:SELECT 'match' WHERE 'username@domain.com' like '%.com%'; -- Result: match
如果您有準確的使用者名和準確的域,您可以使用以下過濾器:
SELECT * FROM users WHERE local_username = 'username@domain' OR -- Exact match local_username LIKE 'username@domain.%'; -- Exact match until dot
如果您有部分過濾器,則必須添加更多
%
(位置取決於您的需要):SELECT * FROM users WHERE local_username LIKE 'username%@domain' OR -- Exact domain ending local_username LIKE 'username%@domain.%'; -- Exact domain ending until dot