如何在PostgreSQL中返回所有数值?

aurhwmvo  于 2022-12-12  发布在  PostgreSQL
关注(0)|答案(3)|浏览(158)

我必须从列中选择所有包含数字的值(NULL值不感兴趣)。我如何使用以下内容对我的表进行查询:

SELECT c1
FROM t1 
WHERE c1 ...;

我试图找到合适的正则表达式,这在许多命令式编程语言中很流行,但不幸的是,它们不适合PostgreSQL(或者我用错了)

ldfqzlk8

ldfqzlk81#

可能的解决方案:

SELECT c1 FROM t1 WHERE c1 ~ '^[-+]?[0-9]*\.?[0-9]+([eE][-+]?[0-9]+)?$';
wn9m85ua

wn9m85ua2#

从模式匹配:

SELECT
    fld
FROM (
    VALUES ('1'),
        ('test1'),
        ('34'),
        ('dog'),
        ('3cat')) AS t (fld)
WHERE
    regexp_match(fld, '^[[:digit:]]{1,}$') IS NOT NULL;

fld 
-----
 1
 34
zvokhttg

zvokhttg3#

另一种可能:

SELECT c1 FROM t1 WHERE c1 ~ '[0-9]';

从此名为STACKOVERFLOW的表中:
| id_堆栈|姓名|
| - -|- -|
| 一个|尼克劳斯·沃思|
| 2个|比昂·斯特鲁斯特鲁普|
| 三个|莱纳斯·托瓦兹|
| 四个|唐纳德·克努特|
| 五个|C3PO|
| 六个|R2D2型|
| 七个|ZX频谱+3|
查询SELECT NAME FROM堆栈溢出WHERE NAME ~ '[0-9]';将返回:
| 姓名|
| - -|
| C3PO|
| R2D2型|
| ZX频谱+3|

相关问题