Regexp只能在文本PostgreSQL中找到6位数字

Regexp只能在文本PostgreSQL中找到6位数字,regex,postgresql,Regex,Postgresql,我需要在PostgreSQL中构建一个查询,并且需要查找包含6位数字的所有文本条目,例如000999、019290、998981、234567等。问题是在字符串的开头或结尾不需要数字 我试过了,但没有成功: [0-9]{6}-返回数字中超过6位的部分 ?:? - postgresql不知道lookback [^0-9][0-9]{6}[^0-9]及其变体,但无效。 构建自己的Perl/C函数并不是一个真正的选项,因为我不具备所需的技能。你知道什么regexp可以被使用,或者其他一些我目前无法掌握

我需要在PostgreSQL中构建一个查询,并且需要查找包含6位数字的所有文本条目,例如000999、019290、998981、234567等。问题是在字符串的开头或结尾不需要数字

我试过了,但没有成功:

[0-9]{6}-返回数字中超过6位的部分 ?:? - postgresql不知道lookback [^0-9][0-9]{6}[^0-9]及其变体,但无效。 构建自己的Perl/C函数并不是一个真正的选项,因为我不具备所需的技能。你知道什么regexp可以被使用,或者其他一些我目前无法掌握的技巧吗

编辑

输入样本:

aa 0011527/CASA->不应返回任何内容 aa 001152/CASA->应返回001152 aa001152/CASA->应返回001152 aa0011527/CASA->不应返回任何内容 aa001152/CASA->应返回001152
如果PostgreSQL支持单词边界,请使用\b:

\b\d{6}\b 编辑:

\b在PostgreSQL中表示退格,因此它不是单词边界

但是,将解释您可以使用\y作为单词边界,因为它表示仅在单词的开头或结尾匹配,所以

\y\d{6}\y 应该有用

\m\d{6}\m 也应该有效

PostgreSQL正则表达式中单词匹配的完整列表:

逃逸描述 \A仅在字符串的开头匹配,请参见第9.7.3.5节了解其区别^ \m仅在单词的开头匹配 \M只在单词的末尾匹配 \y仅在单词的开头或结尾匹配 \Y仅在不是单词开头或结尾的点匹配 \Z仅在字符串的末尾匹配,请参见第9.7.3.5节了解其区别$ 新编辑:

根据您的编辑,您应该能够执行以下操作:

^|[^\d]\d+[^\d]|$
使用@H2Oooo建议的内容,我成功创建了以下查询:

SELECT cleantwo."ID",cleantwo."Name",cleantwo."Code"
FROM
(
SELECT cleanone."ID",cleanone."Name",unnest(cleanone."Code") as "Code" -- 3. unnest all the entries received using regexp_matches (get all combinations)
FROM 
(
SELECT sd."ID", sd."Name", regexp_matches(sd."Name", '(^|[^\d])(\d+)([^\d]|$)')
    as "Code"
FROM "T_SOME_DATA" sd
WHERE substring(sd."Name" from 1 for 15) ~('(^|[^\d])(\d+)([^\d]|$)') -- 1. get all data possible
) as cleanone
WHERE cleanone."Code" IS NOT NULL -- 2. get data where code IS NOT NULL (remove useless entries)
) as cleantwo
WHERE length(cleantwo."Code")=6 -- 4. get only the combinations relevant to my initial requirement (codes with length 6)<br/>

我花了很多时间才找到这个,所以我希望它能帮助其他处于同样情况的人。祝你好运

我认为要求字符串也可以包含其他字符。@NaveedS因为我们没有使用^或$,它将在字符串中的任何位置匹配。@NaveedS是的,字符串可能包含其他字符串。此外,PostgreSQL具有以下边界:。我尝试了你的解决方案,但没有成功。我在问题中添加了一些示例。@h2ooooooo我的最后一个问题在我的答案中,但如果没有您的建议,这是不可能的。标记为回答和感谢!: