MySQL上令人费解的现象:用奇怪的缩短替换为

MySQL上令人费解的现象:用奇怪的缩短替换为,mysql,sql,Mysql,Sql,也许你们中的一些人可以给我一个解释,让我明白以下无法解释的影响: 当我从一个表(保存为类型:DOUBLE)中获取预付款值时,例如-980.20,并将其替换为一个不同的表(类型为DECIMAL(10,2)),该值按预期放置(-980.20),到目前为止,该值不小于-999.99,但如果该值小于-999.99,则将其作为缩短值放置(例如-4233.85>>>as-4,-2108.55>>>as-2) 原始查询是: 替换为'ra\u fd'('Rposid','Nr','Room','Name','R

也许你们中的一些人可以给我一个解释,让我明白以下无法解释的影响:

当我从一个表(保存为类型:DOUBLE)中获取预付款值时,例如-980.20,并将其替换为一个不同的表(类型为DECIMAL(10,2)),该值按预期放置(-980.20),到目前为止,该值不小于-999.99,但如果该值小于-999.99,则将其作为缩短值放置(例如-4233.85>>>as-4,-2108.55>>>as-2)

原始查询是:

替换为'ra\u fd'('Rposid','Nr','Room','Name','Receipt','InvoiceID','InvoiceArt','Done','Form\u of'u paymentID','DoneAt','Tax','Canceled','Stay','AccountType','SKN','BillingGrp','GROSS0%,'GROSS7%,'GROSS7%,'GROSS19%,'Cash','Voucher','Cash','deception','Cash','ADV'PAY0%,'ADV'PAY0%,支票预付款*)
选择gip.`InvoicePositionID`作为Rposid,
1作为'Nr`,
gob.‘Roomnumber’作为房间,
CONCAT(gp.‘姓’、‘姓’、‘Prename’)作为名称,
CONCAT(`Invoicenumber`,'|',gi.`BookingID`)作为`Receipt`,
gip.“发票ID”,
`发票`,
`完成`,
`付款ID`的表格`,
`不要吃`,
gip.‘税收’,
`取消`,
DATEDIFF(`DateTo`,`DateFrom`)作为`Stay`,
gip.`AccountType`作为`AccountType`,
gip.`SKN`作为`SKN`,
“预付款”为“BillingGrp”,
格式(0,2)为'GROSS0%`,
格式(0,2)为'GROSS7%`,
格式(0,2)为'GROSS19%`,
IF(2)中的IF(gi.`Form_of u paymentID`)、IF(gip.`AccountType`=2,格式(((((gip.`Price`)*(100+gip.`折扣`)/100*(100+gip.`Tax`)/100)*DATEDIFF(`DateTo`,`DateFrom`)*gip.`Amount`),2),格式(((gip.`Price`)*(100+gip.`Price`)*.(100+gip.`Tax`)//100*(100+gip.`Tax`)`),格式(2`),格式(现金),2,0,0),
如果(11)中的IF(gi.`Form_of u paymentID`)、IF(gip.`AccountType`=2、格式(((((gip.`Price`)*(100+gip.`Discount`)/100*(100+gip.`Tax`)/100)*DATEDIFF(`DateTo`、`DateFrom`)*gip.`Amount`)、2)、格式(((gip.`Price`)*(100+gip.`Discount`)、格式(100+gip.`Tax`)/100*(100+gip.`Amount`)、格式(2`)、格式(0,0),
(5,6,8)中的IF(gi.`Form_of u paymentID`IN(5,6,8),IFNULL(IF(gip.`AccountType`=2,格式(((gip.`Price`)*(100+gip.`Discount`)/100*(100+gip.`Tax`)/100)*DATEDIFF(`DateTo`,`DateFrom`)*gip.`Amount`),2),格式(((gip.`Price`)*(100+gip.`Discount`)/100*(100+gip.`Discount`),Amount`),格式(`0,2),
如果(9)中的IF(gi.`Form_of_paymentID`),IFNULL(IF(gip.`AccountType`=2,格式(((gip.`Price`)*(100+gip.`折扣`)/100*(100+gip.`Tax`)/100)*DATEDIFF(`DateTo`,`DateFrom`)*gip.`Amount`),2),格式(((gip.`Price`)*(100+gip.`Price`)*(100+gip.`Tax`)/100*(100+gip.`Tax`)/Amount`),格式(2`),格式为0,0),
如果(gip.`SKN`='AP',IFNULL(如果(gip.`AccountType`=2,格式(((gip.`Price`)*(100+gip.`折扣`)/100*(100+gip.`Tax`)/100)*DATEDIFF(`DateTo`,`DateFrom`)*gip.`Amount`),2),格式(((gip.`Price`)*(100+gip.`折扣`)/100*(100+gip.`Tax`)/100*(100+gip.`Amount`)),2)),格式(0,2)),格式为0%,
1作为“预付款”,
0为“已检查”*`
来自“gv_发票”gi
内部连接gv_invoicepositions gip在gi上的位置。`InvoiceID`=gip。`InvoiceID`
和gip.`SKN`='AP'
左连接gv_人员gp(位于gi上)`PersonId`=gp.`AdressID`
左连接gv_bookings gbob ON gi.`BookingID`=gbob.`BookingID`
左连接gbob上的gv_对象gob。`ObjektID`=gob。`ObjektID`
其中,`InvoiceType`=3
和'Done`=1
和`取消`=0
和(日期(`DoneAt`)>='2015-01-01')
按gip分组。`InvoicePositionID`
按gi订购。`InvoiceID`;

感谢您的关注

这对我很有用:

代替本部分:

我的新查询如下所示:

似乎避免使用第1种格式才是解决方案


欢迎评论

你能试着提供一个吗?目前提供的查询似乎有很多样板行,无助于理解你的问题。另外,也许你可以试着提供一个示例行,以便我们可以复制?我无法复制这个问题。请看。你的db小提琴给我带来了一个想法。我尝试了以下内容,并更改了一些RMAT语句。现在它按预期工作…请参阅我的答案***感谢您的输入。
    IF(gi.`Form_of_paymentID` IN (9),IFNULL(IF(gip.`AccountType`= 2,FORMAT((((gip.`Price`)*(100+gip.`Discount`)/100*(100+gip.`Tax`)/100)* DATEDIFF(`DateTo`,`DateFrom`) * gip.`Amount`),2),FORMAT((((gip.`Price`)*(100+gip.`Discount`)/100*(100+gip.`Tax`)/100) * gip.`Amount`),2)),FORMAT(0,2)),FORMAT(0,2))  AS `Credit`, 
    IF(gi.`Form_of_paymentID` IN (9),IFNULL(IF(gip.`AccountType`= 2,(((gip.`Price`)*(100+gip.`Discount`)/100*(100+gip.`Tax`)/100)* DATEDIFF(`DateTo`,`DateFrom`) * gip.`Amount`),(((gip.`Price`)*(100+gip.`Discount`)/100*(100+gip.`Tax`)/100) * gip.`Amount`)),FORMAT(0,2)),FORMAT(0,2))  AS `Credit`,