сообщение об ошибке: «Сообщение 206, Уровень 16, Состояние 2, Строка 1 Тип операнда clash: int несовместим с датой» - PullRequest
0 голосов
/ 04 мая 2018

Я хочу преобразовать дату из даты в дату. Может кто-нибудь ответить на это? Спасибо.

select 

(case when (t0.InvType = '13') then (select (cast(DocDate as date)) from OINV 
where DocEntry = t0.DocEntry and t0.InvType = '13'))

     when t0.InvType = '18' then (select (cast(DocDate as date)) from OPCH where DocEntry = t0.DocEntry and t0.InvType = '18')
      when t0.InvType = '19' then (select (cast(DocDate as date)) from ORPC where DocEntry = t0.DocEntry and t0.InvType = '19')
      when t0.InvType = '204' then (select (cast(DocDate as date)) from ODPO where DocEntry = t0.DocEntry and t0.InvType = '204')
      when t0.InvType = '30' then (select (cast(DocDate as date)) from OJDT where TransId = t0.DocEntry and t0.InvType = '30')
      else 0
            end) as MonthQ

1 Ответ

0 голосов
/ 04 мая 2018

Как и в сообщении об ошибке, тип данных int несовместим с типом данных date. Фактически, числовое значение не может использоваться ни с одним из «новых» типов данных / времени (под «новыми» я подразумеваю типы, введенные в SQL Server 2008, такие как datetime2, datetimeoffset, date).

datetime, однако, совместим, но для новых приложений рекомендуется использовать datetime2 сверх datetime. Однако если вам необходимо преобразовать числовое значение в date, вам сначала нужно преобразовать его в datetime или использовать вместо него DATEADD.

С datetime, ранее дата 0 представляла '1900-01-01'. Таким образом, вместо CONVERT(date,DocDate) вам нужно будет сделать DATEADD(DAY, DocDate , '19000101').

Вместо этого вы также можете использовать CONVERT(date, CONVERT(datetime,DocDate)), но делать 2 преобразования кажется глупым.

...