我需要确定一个给定的字符串是否可以解释为SQL语句中的数字(整数或浮点).如下所示:
SELECT AVG(CASE WHEN x ~ '^[0-9]*.?[0-9]*$' THEN x::float ELSE NULL END) FROM test
Run Code Online (Sandbox Code Playgroud)
我发现Postgres的模式匹配可以用于此.所以我调整了这个地方给出的语句来合并浮点数.这是我的代码:
WITH test(x) AS (
VALUES (''), ('.'), ('.0'), ('0.'), ('0'), ('1'), ('123'),
('123.456'), ('abc'), ('1..2'), ('1.2.3.4'))
SELECT x
, x ~ '^[0-9]*.?[0-9]*$' AS isnumeric
FROM test;
Run Code Online (Sandbox Code Playgroud)
输出:
x | isnumeric
---------+-----------
| t
. | t
.0 | t
0. | t
0 | t
1 | t
123 | t
123.456 | t
abc | f
1..2 | f
1.2.3.4 …Run Code Online (Sandbox Code Playgroud)