PostgreSQL 查询中字符串的最后 n 个字符的正则表达式
Regex for last n characters of String in PostgreSQL query
正则表达式检查不是我的强项。这是微不足道的,但在玩了 15 分钟之后,我认为在这里发布会更快。最终我想过滤掉 table 的任何结果,其中某个文本列值以 S(01 -99) 结尾,即字母 S 后跟 2 位数字。考虑以下测试查询
select x.* from (
select
unnest(array['kjkjkj','jhjs01','kjkj11','kjhkjh','uusus','iiosis99']::text[])
as tests ) x
where RIGHT(x.tests,3) !~ 'S[0-9]{1,2}$'
这 return 是未嵌套数组中的所有内容,而我希望 return 除了第二个和最后一个值之外的所有内容。任何指向正确方向的指示将不胜感激。我正在使用 PostgreSQL v11.9
您实际上可以在此处使用 SIMILAR TO
,因为您的模式并不那么复杂:
SELECT * FROM table
WHERE column_name NOT SIMILAR TO '%S[0-9]{2}'
SIMILAR TO
模式需要完整的字符串匹配,所以在这里,%
匹配字符串开头的任何文本,然后 S
匹配 S
和 [0-9]{2}
匹配必须位于字符串末尾的两个数字。
如果你要使用正则表达式,你可以使用
WHERE column_name !~ 'S[0-9]{2}$'
或者,'S[0-9]{1,2}$'
如果可以有一个或两个数字。由于 PostgreSQL 中的正则表达式搜索不需要完整的字符串匹配,它只匹配 S
,字符串末尾的两个(或一个或两个 {1,2}
)数字($
)。
正则表达式检查不是我的强项。这是微不足道的,但在玩了 15 分钟之后,我认为在这里发布会更快。最终我想过滤掉 table 的任何结果,其中某个文本列值以 S(01 -99) 结尾,即字母 S 后跟 2 位数字。考虑以下测试查询
select x.* from (
select
unnest(array['kjkjkj','jhjs01','kjkj11','kjhkjh','uusus','iiosis99']::text[])
as tests ) x
where RIGHT(x.tests,3) !~ 'S[0-9]{1,2}$'
这 return 是未嵌套数组中的所有内容,而我希望 return 除了第二个和最后一个值之外的所有内容。任何指向正确方向的指示将不胜感激。我正在使用 PostgreSQL v11.9
您实际上可以在此处使用 SIMILAR TO
,因为您的模式并不那么复杂:
SELECT * FROM table
WHERE column_name NOT SIMILAR TO '%S[0-9]{2}'
SIMILAR TO
模式需要完整的字符串匹配,所以在这里,%
匹配字符串开头的任何文本,然后 S
匹配 S
和 [0-9]{2}
匹配必须位于字符串末尾的两个数字。
如果你要使用正则表达式,你可以使用
WHERE column_name !~ 'S[0-9]{2}$'
或者,'S[0-9]{1,2}$'
如果可以有一个或两个数字。由于 PostgreSQL 中的正则表达式搜索不需要完整的字符串匹配,它只匹配 S
,字符串末尾的两个(或一个或两个 {1,2}
)数字($
)。