在我的程序中,我(几乎)有一张这样的桌子:
CREATE TEMP TABLE temp_list
(profilenum integer, profilename text, compid text)
ON COMMIT DROP;
INSERT INTO temp_list
VALUES (1, 'bynamePROFILE_border_Minimal', '03'),
(2, 'bynamePROFILE_backoffice_Universal', '03'),
(3, 'bynamePROFILE_calc_Universal', '03'),
(4, 'bynamePROFILE_calc_Universal', '02'),
(5, 'bynamePROFILE_backoffice_Minimal', '01'),
(6, 'bynamePROFILE_ilup_Universal', '03'); 我可以这样质疑:
SELECT profilename
FROM temp_list WHERE compid='03' AND profilename LIKE 'bynamePROFILE_%';..。什么给出了预期的结果。
但是,我需要一些字符串操作来获得适合于最近在我的程序中转换为数组形式的字符串:
SELECT array_agg(btrim(profilename, 'bynamePROFILE_'))
FROM temp_list WHERE compid='03' AND profilename LIKE 'bynamePROFILE_%'; 这给了我不正确的结果:
"{order_Minimal,ckoffice_Universal,calc_Universal,ilup_Universal}"
(note missing first letter(s) in words beginning with 'b')而不是:
"{border_Minimal,backoffice_Universal,calc_Universal,ilup_Universal}"这是因为我(和往常一样)还是因为PostgreSQL,我的查询是否可以得到改进以获得想要的结果?
Windows 10/64,PostgreSQL 9.6
发布于 2018-01-28 12:59:53
来自文件:
btrim(字符串文本,字符文本) 从字符串的开头和结尾移除仅由字符中的字符组成的最长字符串(默认情况下为空格)。
如果要删除前缀abba,则函数btrim()不是正确的选择:
with my_table (str) as (
values
('abbababax')
)
select btrim(str, 'abba')
from my_table;
btrim
-------
x
(1 row)使用其他字符串操作函数之一,例如right()
with my_table (str) as (
values
('abbababax')
)
select right(str, -4)
-- or
-- select right(str, -length('abba'))
from my_table;
right
-------
babax
(1 row) 使用regexp的示例。使用^字符确保从字符串的开头移除子字符串:
select regexp_replace(str, '^abba', '')
from my_table;https://stackoverflow.com/questions/48486102
复制相似问题