[英]Regular expression: Postgres SQL query is returning all records available in the table
下面的Postgres SQL查詢返回表中所有可用的記錄。 有人可以解釋一下嗎? 。 另外請讓我知道在Postgres正則表達式中*代表什么。
Employee table contains :
name
Chennai
Delhi
Hydrabad
NewYark
ABC
select * from employee where name ~ 'Z*'
這是查找以'Z'開頭的名稱的正確查詢:
SELECT record FROM myrecords WHERE name ~ '^Z';
在您的查詢中:
select * from employee where name ~ 'Z*'
含義是名稱與字符“ Z”的零或更多序列匹配,從而返回所有記錄。
匹配條件中的*
表示零次或多次發生。
*
和tilda一起表示不區分大小寫的匹配,即〜*'Z'將同時匹配“ z”和“ Z”
更多信息請看這里:
http://oreilly.com/pub/a/databases/2006/02/02/postgresq_regexes.html?page=1
*
量詞表示零或更大 。 由於每個名稱至少包含零個Z
字符,因此將返回每一行。
您不需要使用正則表達式來查找以字符開頭的字符串,只需使用LIKE
:
SELECT record FROM myrecords WHERE name LIKE 'Z%';
如果要使用正則表達式以Z開頭的名稱,請嘗試以下操作:
SELECT record FROM myrecords WHERE name ~ '^Z';
如果您想要包含至少一個Z的名稱,請嘗試以下方法之一:
SELECT record FROM myrecords WHERE name LIKE '%Z%';
SELECT record FROM myrecords WHERE name ~ 'Z';
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.