我正在尝试在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语句的语法里面工作?
正如一个侧面说明,你有办法更括号不必要。虽然它们有时对可读性有帮助,但其他时间(例如'ELSE'子句中的双括号),它们只会增加线路噪声并伤害可读性。将代码分割成多行并仔细考虑缩进会比创建更多的括号来使复杂的SQL查询更易于理解和维护。 – 2014-09-02 16:32:53
谢谢乔丹.. – 2014-09-02 18:59:09