仅选择后面跟有数字的字母

4
我正在尝试从PostgreSQL表格中选择一些代码。 我只想要其中包含数字的代码,例如:
GD123 
GD564

我不想选择任何类似于“GDTG GDCNB”这样的代码。

以下是我的查询:

select regexp_matches(no_, '[a-zA-Z0-9]*$')
from myschema.mytable

当然这是无效的。非常感谢您的帮助。

那么124566呢?你的意思是条目不能全部是数字或全部大写字母吗? - Wiktor Stribiżew
抱歉,我不明白。它是关于什么的? - kanataki
1
好的,尝试使用 ^(?![A-Za-z]+$)[a-zA-Z0-9]+$ - Wiktor Stribiżew
1
好的,这就完成了。 - kanataki
5个回答

3

匹配至少有一个字母后跟至少一个数字的字符串的模式是'[A-Za-z]+[0-9]+'

现在,如果有效的模式必须以两个字母开头,然后像您的示例一样有3个数字,则将+替换为{2}{4},并将模式括在^$中,如下所示:'^[A-Za-z]{2}[0-9]{3}$'

正则表达式匹配运算符是~,您可以在where子句中使用它:

SELECT no_
FROM myschema.mytable
WHERE no_ ~ '[A-Za-z]+[0-9]+'

2

您可以使用

CREATE TABLE tb1
    (s character varying)
;

INSERT INTO tb1
    (s)
VALUES
    ('GD123'),
    ('12345'),
    ('GDFGH')
;

SELECT * FROM tb1 WHERE s ~ '^(?![A-Za-z]+$)[a-zA-Z0-9]+$';

结果:

enter image description here

细节

  • ^ - 开始匹配字符串
  • (?![A-Za-z]+$) - 向前负向预查,如果到字符串结尾只有字母,则匹配失败
  • [a-zA-Z0-9]+ - 1个或多个字母数字字符
  • $ - 结束匹配字符串

如果你要避免匹配12345,请使用

'^(?![A-Za-z]+$)(?![0-9]+$)[a-zA-Z0-9]+$'

在这里,(?![0-9]+$)同样会在匹配时失败,如果从字符串开头到字符串结尾的所有字符都是数字。结果如下图所示:

enter image description here


0

类似于:

so=# with c(v) as (values('GD123'),('12345'),('GD ERT'))
select v ~ '[A-Z]{1,}[0-9]+', v from c;
 ?column? |   v
----------+--------
 t        | GD123
 f        | 12345
 f        | GD ERT
(3 rows)

?..


0
如果您想获取的数据格式是一组字符后跟一组数字(即GD123),则可以使用正则表达式:
         [a-zA-Z0-9]+[0-9]

0

这将捕获数字前面的每个数字和字母:

([A-z]+\d+)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接