我必须从列中选择所有包含数字的值(NULL值不感兴趣)。我如何使用以下内容对我的表进行查询:
SELECT c1 FROM t1 WHERE c1 ...;
我试图找到合适的正则表达式,这在许多命令式编程语言中很流行,但不幸的是,它们不适合PostgreSQL(或者我用错了)
ldfqzlk81#
可能的解决方案:
SELECT c1 FROM t1 WHERE c1 ~ '^[-+]?[0-9]*\.?[0-9]+([eE][-+]?[0-9]+)?$';
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
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|
3条答案
按热度按时间ldfqzlk81#
可能的解决方案:
wn9m85ua2#
从模式匹配:
zvokhttg3#
另一种可能:
从此名为STACKOVERFLOW的表中:
| id_堆栈|姓名|
| - -|- -|
| 一个|尼克劳斯·沃思|
| 2个|比昂·斯特鲁斯特鲁普|
| 三个|莱纳斯·托瓦兹|
| 四个|唐纳德·克努特|
| 五个|C3PO|
| 六个|R2D2型|
| 七个|ZX频谱+3|
查询SELECT NAME FROM堆栈溢出WHERE NAME ~ '[0-9]';将返回:
| 姓名|
| - -|
| C3PO|
| R2D2型|
| ZX频谱+3|