【发布时间】:2011-01-15 18:37:21
【问题描述】:
嘿,我关于 SO 的第一个问题!任何人...
在 SQL 方面还是个新手,所以我想我可能在这里遗漏了一些东西。我的问题是我目前有一个完整的电话号码表。我想要一个查询,在其中搜索与我拥有的列表相似的电话号码。例如,我想查找以“555123”、“555321”和“555987”开头的电话号码。我通常知道如果你有一个数字列表,你可以做一个查询,比如
SELECT *
FROM phonenumbers
WHERE number in ('5551234567', '5559876543', .... );
有没有办法用like来做到这一点?比如
SELECT *
FROM phonenumbers
WHERE number in like ('555123%', '555321%', '555987%'); //I know this doesn't actually work
而不是必须单独执行此操作
SELECT *
FROM phonenumbers
WHERE number like '555123%'
or number like '555321%'
or number like '555987%'; //Which does work but takes a long time
或者我只是想念一个更容易做到这一点的方法吗?我正在使用 postgres,我不知道它是否有任何命令可以帮助解决这个问题。谢谢!
【问题讨论】:
-
欢迎来到 SO!我已经重新标记了您的问题,以澄清它与 postgres 相关
-
什么版本的 Postgres?听起来像是正则表达式的工作:postgresql.org/docs/8.3/static/functions-matching.html
-
Which does work but takes a long time- 除非您更改查询的性质,否则同一事物的不同语法表示将花费很长时间。该列是否已编入索引? -
实际上该列已被索引。我以前没有注意到这一点。哦,我正在使用 postgres 8.0。我正在搜索大量数字。
-
您的查询需要多长时间?您的表中有多少条记录?
标签: sql postgresql