嘿我关于SO的第一个问题!Anywho ...
在SQL上还是比较新的,所以我想我可能会遗漏一些东西.我的问题是我目前有一张满是电话号码的桌子.我想查询一下我搜索的电话号码与我的列表类似.例如,我想找到以"555123","555321"和"555987"开头的电话号码.我通常知道如果你有一个数字列表,你可以做一个查询,如
SELECT *
FROM phonenumbers
WHERE number in ('5551234567', '5559876543', .... );
Run Code Online (Sandbox Code Playgroud)
有没有办法像这样做?如
SELECT *
FROM phonenumbers
WHERE number in like ('555123%', '555321%', '555987%'); //I know this doesn't actually work
Run Code Online (Sandbox Code Playgroud)
而不是必须单独做这件事
SELECT *
FROM phonenumbers
WHERE number like '555123%'
or number like '555321%'
or number like '555987%'; //Which does work but takes a long time
Run Code Online (Sandbox Code Playgroud)
或者是否更容易做到这一点,我只是缺少?我正在使用postgres,我不知道是否有任何命令可以帮助解决这个问题.谢谢!
Pen*_*m10 38
您可以使用SIMILAR TO和分隔标记 管'555123%|555321%|555987%'
例如:
SELECT *
FROM phonenumbers
WHERE number SIMILAR TO '555123%|555321%|555987%'
Run Code Online (Sandbox Code Playgroud)
Ric*_*kyA 24
晚到晚会,但为了后人...你也可以使用ANY(数组表达式)
SELECT *
FROM phonenumbers
WHERE number LIKE ANY(ARRAY['555123%', '555321%', '555987%'])
Run Code Online (Sandbox Code Playgroud)
假设你的所有数字都不包含字母,而且你的数字总是"前缀"(例如:)LIKE '123%':
SELECT number
FROM (
VALUES
('555123'),
('555321'),
('555000')
) prefixes (prefix)
JOIN phonenumbers
ON number >= prefix
AND number < prefix || 'a'
Run Code Online (Sandbox Code Playgroud)
这将使用索引phonenumbers,如果有的话,可以更快.
| 归档时间: |
|
| 查看次数: |
23820 次 |
| 最近记录: |