如何使用 PostgreSQL 计算一列中有多少条目是数字的
How to count how many entries in a column are numeric using PostgreSQL
我正在尝试计算一列中有多少条目既是数字又满足其他条件。我了解该脚本在 SQL:
中的含义
SELECT COUNT(ingredients)
FROM data.pie
WHERE description LIKE 'cherry'
AND is.numeric(price) = true
但我不确定如何将其转换为 PostgreSQL 脚本。任何帮助将不胜感激。
谢谢。
您当前的查询稍作修改后应该可以工作:
SELECT COUNT(ingredients)
FROM data.pie
WHERE
description LIKE 'cherry' AND
price ~ '^[0-9]+([.][0-9]+)?$';
蒂姆展示的另一种替代方法是创建一个函数...
CREATE OR REPLACE FUNCTION is_numeric(val VARCHAR) RETURNS BOOLEAN AS $$
DECLARE x NUMERIC;
BEGIN
x = val::NUMERIC;
RETURN TRUE;
EXCEPTION WHEN OTHERS THEN
RETURN FALSE;
END;
$$
STRICT
LANGUAGE plpgsql IMMUTABLE;
.. 可以这样使用:
db=# SELECT is_numeric('foo'), is_numeric('1'), is_numeric('1.39');
is_numeric | is_numeric | is_numeric
------------+------------+------------
f | t | t
(1 Zeile)
我正在尝试计算一列中有多少条目既是数字又满足其他条件。我了解该脚本在 SQL:
中的含义 SELECT COUNT(ingredients)
FROM data.pie
WHERE description LIKE 'cherry'
AND is.numeric(price) = true
但我不确定如何将其转换为 PostgreSQL 脚本。任何帮助将不胜感激。
谢谢。
您当前的查询稍作修改后应该可以工作:
SELECT COUNT(ingredients)
FROM data.pie
WHERE
description LIKE 'cherry' AND
price ~ '^[0-9]+([.][0-9]+)?$';
蒂姆展示的另一种替代方法是创建一个函数...
CREATE OR REPLACE FUNCTION is_numeric(val VARCHAR) RETURNS BOOLEAN AS $$
DECLARE x NUMERIC;
BEGIN
x = val::NUMERIC;
RETURN TRUE;
EXCEPTION WHEN OTHERS THEN
RETURN FALSE;
END;
$$
STRICT
LANGUAGE plpgsql IMMUTABLE;
.. 可以这样使用:
db=# SELECT is_numeric('foo'), is_numeric('1'), is_numeric('1.39');
is_numeric | is_numeric | is_numeric
------------+------------+------------
f | t | t
(1 Zeile)