2014-09-02 301 views
2

我正在嘗試在case語句中使TODATETIMEOFFSET工作。當我嘗試執行此操作時,SQL返回錯誤。如果它不在case語句中,可以正常工作。我究竟做錯了什麼?case case語句中的TODATETIMEOFFSET

SELECT AP.POR, 
     AP.POD Path, 
     TODATETIMEOFFSET(AP.StartTime, '-06:00') as StartTime, 
     MinimumPrice = (
     CASE WHEN (CHARINDEX('','' + '''[email protected]+''' + '','', '','' + '''[email protected]+''' + '','') > 0) 
       THEN TODATETIMEOFFSET(AP.MinimumPrice, '-06:00') 
       ELSE ((
       CASE WHEN (getdate() < C.ClearingTime and C.OpenPriceMask = 0) 
         THEN NULL 
        WHEN (getdate() > C.ClearingTime and C.ClearedPriceMask = 0) 
         THEN NULL 
        ELSE AP.MinimumPrice 
       END 
      )) 
     END 
     ), 
     AP.ClearingPrice, 
     AP.PriceUnits 
    FROM TES_Auction C 
     INNER JOIN TES_AuctionPrice AP ON AP.AuctionID = C.ID 
Msg 206, Level 16, State 2, Line 1 
Operand type clash: decimal is incompatible with datetime2 

還我怎樣才能使 '爲' case語句的語法裏面工作?

+0

正如一個側面說明,你有辦法更括號不必要。雖然它們有時對可讀性有幫助,但其他時間(例如'ELSE'子句中的雙括號),它們只會增加線路噪聲並傷害可讀性。將代碼分割成多行並仔細考慮縮進會比創建更多的括號來使複雜的SQL查詢更易於理解和維護。 – 2014-09-02 16:32:53

+0

謝謝喬丹.. – 2014-09-02 18:59:09

回答

4

它看起來像你有你的查詢,這部分的錯誤:

THEN TODATETIMEOFFSET(AP.MinimumPrice, '-06:00') 

AP.MinimumPrice我希望小數類型,SQL不能將十進制轉換爲datetime2

而且,對一個case語句使用列別名,你會把它在最後只是下一個逗號之前,例如:

ELSE AP.MinimumPrice END))END) AS myColumnName, -- etc. 
+0

AP.MinimumPrice會像'2013年2月01日02:00:00.000 -06:00'。 TODATETIMEOFFSET(AP.StartTime,'-06:00')作爲StartTime, - 這部分工作正常,它返回像我上面所述的東西。 唯一我無法弄清楚的是爲什麼這在case語句中不起作用。 感謝您的信息。 – 2014-09-02 16:30:05

+0

對不起。你是對的。謝謝:) – 2014-09-02 16:40:37

+0

很高興我可以幫助:) – Phrancis 2014-09-02 16:43:54