我是PostgreSQL的新手。我目前正在使用第三方PostgreSQL数据库,我的READ权限有限,所以我无法创建临时表或创建“用户定义”变量。此外,我发现在Postgres中处理正则表达式比MySQL更困难。
问:
我有下面的dummy table:
Code | Name
11199 | a
22299 | b
33399 | c
44499 | a
55599 | c
字符串
现在我有了一个离线的数字列表(不能在这个数据库中创建/修改表)。我需要选择其代码以这些数字开头的名称-但返回代码应该是查询语句中的代码。
数字示例列表:
1
2
3
4
5
型
所需查询结果:
code | name
1 | a
2 | b
3 | c
4 | a
5 | c
型
如果我有更多的db权限,我可以想到一些方法来完成它(比如将列表插入到数据库中的一个表中,加上使用临时表+如果我可以像在mysql中那样使用regex),但我不知道在Postgres上从哪里开始。Help?:)
2条答案
按热度按时间siv3szwd1#
就像这样:
字符串
sql fiddle demo
jecbmhm32#
重新审视你的假设。正则表达式是Postgres中一个基本的标准特性。还有一些使用正则表达式的内置函数。
但是这里你不需要正则表达式。使用标准SQL
LIKE
运算符。请参阅:您可以将列表作为数组和
unnest()
as demonstrated by Roman提供,也可以使用VALUES
expression直接与ad-hoc表一起提供。我 * 假设 *,多行可以匹配,并且您只希望列表中的每个数字都有一个结果:字符串
大单子高级解决方案
如果你有一个(大)文件持有数字(和必要的特权!),您可以使用更高级的技术,例如:
COPY
到临时表pg_read_file()
(用于特殊用途,需要超级用户权限)file_fdw
)上的外部数据 Package相关信息: