0
可能是一些你可以給我一個解釋,以瞭解以下爲我不明原因的影響:莫名Phenome在MySQL:REPLACE與陌生縮短
當我抓住從一個表(保存爲一個類型提前還款值: DOUBLE),例如-980.20,並將其替換爲不同的表格(類型爲DECIMAL(10,2)),該值按預期放置(-980.20),但值不小於-999.99,但當值較小時然後-999.99被放置爲縮短的值(例如-4233.85 >>>爲-4,-2108.55 >>>爲-2)
原始查詢是:
REPLACE INTO `ra_fd` (`Rposid`, `Nr`, `Room`, `Name`, `Receipt`, `InvoiceID`, `InvoiceArt`, `Done`, `Form_of_paymentID`, `DoneAt`, `Tax`, `Canceled`, `Stay`, `AccountType`, `SKN`, `BillingGrp`, `GROSS0%`, `GROSS7%`, `GROSS19%`, `Cash`, `Voucher`, `Cashless`, `Credit`, `ADV_PAY0%`, `Advance_payment`, `Checked*`)
SELECT gip.`InvoicePositionID` AS Rposid,
1 AS `Nr`,
gob.`Roomnumber` AS Room,
CONCAT (gp.`Surname`,', ',gp.`Prename`) AS Name,
CONCAT(`Invoicenumber`,' | ',gi.`BookingID`) AS `Receipt`,
gip.`InvoiceID`,
`InvoiceArt`,
`Done`,
`Form_of_paymentID`,
`DoneAt`,
gip.`Tax`,
`Canceled`,
DATEDIFF(`DateTo`,`DateFrom`) AS `Stay`,
gip.`AccountType` AS `AccountType`,
gip.`SKN` AS `SKN`,
"Advance_payment" AS `BillingGrp`,
FORMAT(0,2) AS `GROSS0%`,
FORMAT(0,2) AS `GROSS7%`,
FORMAT(0,2) AS `GROSS19%`,
IF(gi.`Form_of_paymentID` IN (2), 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 `Cash`,
IF(gi.`Form_of_paymentID` IN (11),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 `Voucher`,
IF(gi.`Form_of_paymentID` IN (5,6,8),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 `Cashless`,
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(gip.`SKN` = 'AP',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 `ADV_PAY0%`,
1 AS `Advance_payment`,
0 AS `Checked*`
FROM `gv_invoicees` gi
INNER JOIN gv_invoicepositions gip ON gi.`InvoiceID` = gip.`InvoiceID`
AND gip.`SKN` = 'AP'
LEFT JOIN gv_persons gp ON gi.`PersonsID` = gp.`AdressID`
LEFT JOIN gv_bookings gbob ON gi.`BookingID` = gbob.`BookingID`
LEFT JOIN gv_objects gob ON gbob.`ObjektID` = gob.`ObjektID`
WHERE `InvoiceType`= 3
AND `Done`= 1
AND `Canceled`= 0
AND (DATE(`DoneAt`) >= '2015-01-01')
GROUP BY gip.`InvoicePositionID`
ORDER BY gi.`InvoiceID`;
感謝您的關注
能否請您儘量提供一個[MVCE(https://stackoverflow.com/help/mcve)?目前提供的查詢似乎有許多樣板行,無助於理解您的問題。此外,也許你可以嘗試提供[SQL小提琴](http://sqlfiddle.com/),以便我們可以複製? – sp00m
我無法重現該問題。請參閱[db-fiddle](https://www.db-fiddle.com/f/6So8dxXLgc7tAERBiL96NU/0)。 – wchiquito
你的db-fiddle讓我想到了一個想法。我嘗試了以下內容並更改了一些FORMAT語句。現在它按預期工作......查看我的答案***感謝您的意見。 – liveoak