只选择后跟数字的字母

时间:2018-05-17 12:43:06

标签: regex postgresql

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

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

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

到目前为止我的查询:

fork()

当然不起作用。 任何帮助表示赞赏。

5 个答案:

答案 0 :(得分: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]+ - 一个或多个字母数字字符
  • $ - 字符串结束。

如果您想避免匹配12345,请使用

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

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

enter image description here

答案 1 :(得分:2)

匹配至少包含1个字母后跟至少1个数字的字符串的模式为'[A-Za-z]+[0-9]+'

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

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

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

答案 2 :(得分: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)

?..

答案 3 :(得分:0)

如果您想要获取的数据格式是一组数字(即GD123),您可以使用正则表达式:

         [a-zA-Z0-9]+[0-9]

答案 4 :(得分:0)

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

([A-z]+\d+)