SQL 通配符只获取数字

SQL wildcard to fetch numbers only

我有一个这样的查询
select * from table_sports where player_id like 'playerId-%';

在这里,player_id 列可以具有这种格式的值 playerId-123playerId-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-%^/-'; 那没有用(没有返回记录),我用谷歌搜索了它,但没有成功。

请帮忙。

LIKE 不支持 SQL.

中的正则表达式

您需要使用符合标准的 similar to 或 Postgres 专有的 ~ 运算符来与正则表达式进行比较。

where player_id similar to 'playerId-[0-9]+'

where player_id ~ '^playerId-[0-9]+$'

注意正则表达式的区别:similar to 不需要“锚点”,因为它总是进行完全匹配。

如果您想要敏感比较中的大小写,请使用~*而不是~

LIKE 不适用于正则表达式,您可以使用以下方法之一:

方法一:用另一个where条件排除不需要的记录

select * from table_sports 
where player_id like 'playerId-%'
and player_id not like 'playerId-%-%';

方法二:使用regular expression operator ~ to use bracket expressions

select * from table_sports 
where player_id ~ '^playerId-([0-9]+)$'

可以看到this answer to know why LIKE is faster than using regular expressions in this case. And why you shouldn't use SIMILAR TO