【发布时间】:2020-07-15 18:27:42
【问题描述】:
所以我被要求为一个大学项目做这个查询:
SELECT l.city AS name, AVG((pr.ap_price::double precision
* 7 - pr.weekly::double precision)
/((pr.ap_price::double precision))*100) AS savings_percentage
FROM locations AS l, price AS pr, apartments AS ap, hosts AS h
WHERE pr.id_apt = ap.id_apartment AND l.id_apt = ap.id_apartment AND h.host_id = ap.id_host AND h.host_identity_verified = 't'
GROUP BY l.city
ORDER BY savings_percentage DESC LIMIT 3;
pr.ap_price 和 pr.ap_weekly 都保存为字符串 (VARCHAR(255)),我尝试使用 CAST(pr.ap_price AS double precision) 或使用上面代码中的选项将它们转换为其他类型。
无论我将其转换为数字还是双精度,它总是最终显示相同的错误:
ERROR: la sintaxis de entrada no es válida para tipo double precision: «1,100.00» SQL state: 22P02
(用西班牙语但基本上是说错误:入口语法对双精度类型无效)
如何正确投射?我的目标是将其从字符串转换为数字以便能够比较它们。
我也尝试过使用:
ALTER TABLE apartments_importacio ALTER COLUMN price TYPE double precision USING (price::double precision); 但显示相同的错误。 (其中 apartments_importacio 是我复制 .csv 文件以便稍后插入其他表的表)
有什么线索吗?提前致谢!
【问题讨论】:
-
一条或多条记录的字段中的值无法转换为双精度数字。请参阅stackoverflow.com/questions/16195986/isnumeric-with-postgresql 以获取检查值是否为数字的建议函数。
标签: sql string postgresql casting double