我正在尝试从PostgreSQl表中选择一些代码。 我只想要包含数字的代码,例如
select regexp_matches(no_, '[a-zA-Z0-9]*$')
from myschema.mytable
我不想选择任何代码,例如`GDTG GDCNB
到目前为止我的查询:
fork()
当然不起作用。 任何帮助表示赞赏。
答案 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]+$';
结果:
<强>详情
^
- 字符串开头(?![A-Za-z]+$)
- 如果只有字母到字符串末尾的字母,那就是未通过匹配的否定前瞻[a-zA-Z0-9]+
- 一个或多个字母数字字符$
- 字符串结束。如果您想避免匹配12345
,请使用
'^(?![A-Za-z]+$)(?![0-9]+$)[a-zA-Z0-9]+$'
这里,如果从字符串开始,所有字符到字符串的末尾都是数字,(?![0-9]+$)
同样会使匹配失败。结果:
答案 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+)