Преобразование даты не работает со стилем 103 - PullRequest
0 голосов
/ 06 мая 2018

Я сохранил свою дату как тип данных nvarchar(50) в SQL Server. Когда я запускаю этот запрос:

select [Client_code], Date_of_receipt 
from [T_Receving] 

Я получаю вывод, как это:

enter image description here

но я хочу отфильтровать свои записи по определенной дате, поэтому я написал такой запрос

select 
    convert(date, [Date_of_receipt], 103) as 'Date_of_Receipt' 
from  
    [T_Receving]  
where  
    convert(date, [Date_of_receipt], 103) between '2015-03-06' and '2018-05-06'    

но показывает ошибку

Ошибка преобразования при преобразовании даты и / или времени из строки символов

Ответы [ 2 ]

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

Вы должны преобразовать в datetime, а затем преобразовать обратно в varchar

 declare @dtv varchar(20) = '2018-17-04'
 declare @dtvdt datetime = convert(datetime, @dtv, 103) 
 select  @dtvdt;
 select convert(varchar(20), convert(datetime, @dtv, 103), 103), @dtv
 where  convert(datetime, @dtv, 103) between '2015-03-06' and '2018-05-06'
0 голосов
/ 06 мая 2018

У вас явно плохие данные. Используйте try_convert():

select try_convert(DATE, Date_of_receipt, 103) as Date_of_Receipt 
from T_Receving
where try_convert(DATE, Date_of_receipt, 103) between '2015-03-06' and '2018-05-06'  ;

В SQL Server 2008 вам нужно больше работать, чтобы найти виновных. Вы можете начать с:

select date_of_receipt
from T_Receving
where date_of_receipt not like '[0-3][0-9]/[0-1][0-9]/[0-9][0-9][0-9][0-9]'

Это позволит найти большинство случаев плохих форматов. Если это все еще сохраняется, вам придется копать глубже, чтобы найти плохие номера дня или месяца.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...