首页 > 解决方案 > 仅选择后跟数字的字母

问题描述

我正在尝试从 PostgreSQl 表中选择一些代码。我只想要其中有数字的代码,例如

GD123 
GD564

我不想选择任何代码,例如`GDTG GDCNB

到目前为止,这是我的查询:

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

这当然行不通。任何帮助表示赞赏。

标签: regexpostgresql

解决方案


您可以使用

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]+$';

结果:

在此处输入图像描述

细节

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

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

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

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

在此处输入图像描述


推荐阅读