如何使用PostgreSQL计算列中有多少项是数字
我试图计算一列中有多少个条目是数字的,并且满足其他条件。我理解该脚本在SQL中的含义:如何使用PostgreSQL计算列中有多少项是数字,postgresql,count,alphanumeric,Postgresql,Count,Alphanumeric,我试图计算一列中有多少个条目是数字的,并且满足其他条件。我理解该脚本在SQL中的含义: SELECT COUNT(ingredients) FROM data.pie WHERE description LIKE 'cherry' AND is.numeric(price) = true 但我不知道如何将其转换为PostgreSQL脚本。任何帮助都将不胜感激 谢谢。您当前的查询稍加修改,应该可以: SELECT COUNT(ingredients) FROM
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]+)?$';
您当前的查询经过轻微修改后,应该可以工作:
SELECT COUNT(ingredients)
FROM data.pie
WHERE
description LIKE 'cherry' AND
price ~ '^[0-9]+([.][0-9]+)?$';
Tim展示的另一个替代方案是创建一个函数
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)
Tim展示的另一个替代方案是创建一个函数
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)
有没有非数字的价格?十四美元有没有非数字的价格?十四美元如果有提姆的空间,那么吉姆+1也有空间。@Alokin SELECT*FROM data.pie在哪里_numericprice@Alokin您必须首先创建函数。打开到postgres的连接并执行我在答案上写的CREATEFUNCTION语句。如果它在SELECT子句中起作用,那么它必须在WHERE子句中起作用well@Alokin请记住,此函数需要一个varchar作为参数。如错误消息所示,如果要传递数值,则必须强制转换:SELECT*FROM data.pie,其中是_numericprice::varchar。尽管我不确定它对您的用例是否有意义:D@Alokin没问题,很高兴有帮助。考虑关闭这个问题,以便其他人可以更容易地找到它。如果有提姆的空间,那么也有吉姆+ 1的空间。numericprice@Alokin您必须首先创建函数。打开到postgres的连接并执行我在答案上写的CREATEFUNCTION语句。如果它在SELECT子句中起作用,那么它必须在WHERE子句中起作用well@Alokin请记住,此函数需要一个varchar作为参数。如错误消息所示,如果要传递数值,则必须强制转换:SELECT*FROM data.pie,其中是_numericprice::varchar。尽管我不确定它对您的用例是否有意义:D@Alokin没问题,很高兴有帮助。考虑关闭这个问题,以便其他人可以更容易地找到它。我试着运行它,并且我在蒂尔达周围得到一个错误:错误:运算符不存在:数值~未知的提示:没有操作符匹配给定的名称和参数类型。您可能需要添加显式类型转换。这是否意味着它不认识蒂尔达?还是后面的条件呢?是你们的价格栏文字吗?请注意,理想情况下,价格应该存储在数字类型列中。您是对的。使用Jim的条目,我必须使这个price::varchar~“^[0-9]+[.][0-9]+?$”运行。那么price是什么类型的?我的意思是,你的问题只有在价格不是数字的情况下才有意义。在任何情况下,如上所述,您应该将价格存储在数字列中。“价格”标记为文本,但其中可能有一些数字,因此我进行此计数以确定有多少。我已经尝试运行了,我在tilda中得到一个错误,它说:error:operator不存在:numeric~unknown提示:没有与给定名称和参数类型匹配的运算符。您可能需要添加显式类型转换。这是否意味着它不认识蒂尔达?还是后面的条件呢?是你们的价格栏文字吗?请注意,理想情况下,价格应该存储在数字类型列中。您是对的。使用Jim的条目,我必须使这个price::varchar~“^[0-9]+[.][0-9]+?$”运行。那么price是什么类型的?我的意思是,你的问题只有在价格不是数字的情况下才有意义。在任何情况下,如上所述,您应该将价格存储在数字列中。“price”标记为文本,但其中可能包含一些数字,因此我进行此计数以确定有多少。