Postgresql

Postgres LIKE 語句可以返回完全匹配嗎?

  • August 22, 2018

我正在嘗試使用 LIKE 和 % 搜尋 Postgres 表,但查詢未返回結果。

該列local_username將包含格式如下的值:username@domain.localOR username@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

引用自:https://dba.stackexchange.com/questions/215606