SQL和负浮动

时间:2013-02-03 17:51:32

标签: php sql postgresql

考虑这个相当简单的SQL查询:

"SELECT * FROM transactions 
WHERE amount BETWEEN $cost_amount AND 0
AND acc_int IN ('Contant', '647-0191181-84')
AND dos_costs_id IS NULL
AND date + interval '30 days' >= to_date('$cost_date', 'YYYY-MM-DD')
ORDER BY (amount <> to_number('$cost_amount','99999999D99')), date DESC"

我已经使用这个确切的查询两年了,以显示我们传入交易的帐户上的所有可能交易。所有这些'金额'都是积极的浮动。

现在我正在重复使用查询进行外发交易,因此金额总是负数。每当金额为整数时,这都有效,但只要值为浮点数就会停止。因此,值前面的' - '和数量末尾的'逗号和两个尾随数字'的组合会返回语法错误,例如:

Query failed: ERROR: syntax error at or near "," LINE 2: WHERE amount BETWEEN -327,13 AND 0

我尝试在金额附近添加引号,但这没有帮助。

2 个答案:

答案 0 :(得分:5)

尝试使用点而不是逗号:)

答案 1 :(得分:1)

您需要使用to_number将###,##转换为###。##。 SQL不会接受逗号作为数字。尝试这样的东西,这将适用于逗号和句号:

SELECT * 
FROM YourTable
WHERE amount BETWEEN to_number('-327,13', '99G999') AND 0

这是SQL Fiddle

祝你好运。