【发布时间】:2014-09-02 16:09:10
【问题描述】:
我正在尝试使 TODATETIMEOFFSET 在 case 语句中工作。当我尝试执行此操作时,sql 返回以下错误。如果它不在 case 语句中,则可以正常工作。我究竟做错了什么?
SELECT AP.POR,
AP.POD Path,
TODATETIMEOFFSET(AP.StartTime, '-06:00') as StartTime,
MinimumPrice = (
CASE WHEN ( CHARINDEX('','' + '''+@Provider+''' + '','', '','' + '''+@UserCompanyList+''' + '','') > 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
我怎样才能使'as'语法在case语句中工作?
【问题讨论】:
-
顺便说一句,你的括号比必要的多。虽然它们有时有助于提高可读性,但有时(例如您在
ELSE子句周围的双括号)它们只会增加行噪音并损害可读性。将您的代码拆分为多行并考虑缩进将比额外的括号做更多的事情,以使复杂的 SQL 查询具有可读性和可维护性。
标签: sql datetimeoffset