2017-05-08 31 views
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`; 

感謝您的關注

+0

能否請您儘量提供一個[MVCE(https://stackoverflow.com/help/mcve)?目前提供的查詢似乎有許多樣板行,無助於理解您的問題。此外,也許你可以嘗試提供[SQL小提琴](http://sqlfiddle.com/),以便我們可以複製? – sp00m

+0

我無法重現該問題。請參閱[db-fiddle](https://www.db-fiddle.com/f/6So8dxXLgc7tAERBiL96NU/0)。 – wchiquito

+0

你的db-fiddle讓我想到了一個想法。我嘗試了以下內容並更改了一些FORMAT語句。現在它按預期工作......查看我的答案***感謝您的意見。 – liveoak

回答

0

這個工作對我來說:

代替這部分:

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`, 

它似乎是避免第一個FORMAT是解決方案。

評論,歡迎