我有一個像這樣的查詢
select * from table_sports where player_id like 'playerId-%';
這里 player_id 列可以有這種格式的值, playerId-123或者playerId-12-32343連字符 (-) 后面的數字大小是未知的,它也可以是playerId-1000012。
我只想獲取具有這種格式的記錄playerId-123并避免具有這種格式的記錄playerId-12-32343(兩個連字符)
我嘗試過這樣的查詢select * from table_sports where player_id like 'playerId-[0-9]';
,select * from table_sports where player_id like 'playerId-%^/-';但沒有成功(沒有回傳記錄),我用谷歌搜索了它,但沒有運氣。
請幫忙。
uj5u.com熱心網友回復:
LIKE不支持 SQL 中的正則運算式。
您要么需要使用符合標準的運算子,要么需要使用similar toPostgres 的專有~運算子來與正則運算式進行比較。
where player_id similar to 'playerId-[0-9] '
where player_id ~ '^playerId-[0-9] $'
注意正則運算式的區別:similar to不需要“錨”,因為它總是完全匹配。
如果您想在敏感比較中區分大小寫,請使用~*而不是~
uj5u.com熱心網友回復:
LIKE不適用于正則運算式,您可以使用以下方法之一:
方法一:where用其他條件排除不需要的記錄
select * from table_sports
where player_id like 'playerId-%'
and player_id not like 'playerId-%-%';
方法二:使用正則運算式運算子 ~,使用括號運算式
select * from table_sports
where player_id ~ '^playerId-([0-9] )$'
您可以查看此答案以了解為什么LIKE比regular expressions在這種情況下使用更快。以及為什么你不應該使用SIMILAR TO
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/442335.html
標籤:sql PostgreSQL 通配符
上一篇:這可以是什么樣的日期風格?
