日期转换不适用于样式103

时间:2018-05-06 13:01:13

标签: sql sql-server sql-server-2008

我已将日期保存为SQL Server中的nvarchar(50)数据类型。当我运行此查询时:

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 :(得分:0)

你显然有一些不好的数据。使用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]'

这将找到大多数错误格式的实例。如果它仍然存在,你将不得不深入挖掘,找出糟糕的日期或月份数字。

答案 1 :(得分:0)

您必须转换为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'