SQL 通配符只获取数字
SQL wildcard to fetch numbers only
我有一个这样的查询
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-%^/-';
那没有用(没有返回记录),我用谷歌搜索了它,但没有成功。
请帮忙。
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
我有一个这样的查询
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-%^/-';
那没有用(没有返回记录),我用谷歌搜索了它,但没有成功。
请帮忙。
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