проблема со вставкой поля NULL в столбец даты и времени

У меня проблема с этим кодом ниже. Это дает мне эту ошибку: Преобразование не удалось при преобразовании даты и/или времени из строки символов.

Значение даты фактически равно NULL (не текстовое NULL), а дата имеет формат 2016-12-02.

Кто-нибудь знает, как обойти это, пробовал использовать приведение и конвертировать в дату и время, это не сработало....

select  PersonalID
    ,[LeaveDate] as [LeaveDate]
into 
    #temp1
from (SELECT
         [staffid] as PersonalID
         ,[leaving_d] as [LeaveDate]
     FROM 
         rcmsql4.[SSTRESS].[dbo].[vwGetStaffDetails]
     UNION ALL
     SELECT 
         [StudentId] as PersonalID
         , NULL
     FROM 
         rcmsql4.[SSTRESS].[dbo].[vwGetResearchStudentDetails]) x
GROUP BY
    PersonalID
    ,[LeaveDate]


INSERT INTO [dbo].[STG1StaffProfiles]
           ([PersonalID]
           ,[LeaveDate] --datetime field)
    select * from #temp1

person Lauren Buxton    schedule 23.11.2016    source источник
comment
Приведите в порядок свой код. (Удалить пустые строки и т.д.)   -  person jarlh    schedule 23.11.2016
comment
Похоже, [LeaveDate] имеет недопустимые текстовые значения... можете узнать, на что они похожи? Например, пустой текст: '' или NULL текст: 'NULL'...   -  person Thejaka Maldeniya    schedule 23.11.2016
comment
Таким образом, они являются фактическим значением NULL, а не текстовым NULL.   -  person Lauren Buxton    schedule 23.11.2016
comment
Как насчет ненулевых значений [leaving_d], возвращаемых из [vwGetStaffDetails]? Возвращаются ли они в виде строк, и если да, то отформатированы ли они так, чтобы людям было удобно? Повозившись с SSMS, я заметил, что select convert(datetime, 'November 24, 2016') as foo работает нормально, а select convert(datetime, 'Thursday, November 24, 2016') as foo не работает с приведенным вами сообщением об ошибке.   -  person Gord Thompson    schedule 25.11.2016
comment
так выглядит дата 2016-12-02   -  person Lauren Buxton    schedule 29.11.2016


Ответы (1)


Попробуйте кастинг:

 INSERT INTO [dbo].[STG1StaffProfiles]
       ([PersonalID]

       ,[LeaveDate] --datetime field
      )
SELECT [PersonalID],CAST(COALESCE([LeaveDate],'01-01-1999') as DATE)
FROM #temp1
person sagi    schedule 23.11.2016
comment
Я хочу сохранить NULL, NULL не заменять на 1999 - person Lauren Buxton; 23.11.2016
comment
Тогда оставьте COALESCE() , попробуйте без него. @LaurenBuxton - person sagi; 23.11.2016
comment
все та же проблема Msg 241, уровень 16, состояние 1, строка 4 Преобразование не удалось при преобразовании даты и/или времени из символьной строки. - person Lauren Buxton; 29.11.2016