我已将日期保存为SQL Server中的nvarchar(50)
数据类型。当我运行此查询时:
select [Client_code], Date_of_receipt
from [T_Receving]
我得到这样的输出:
但我想按特定日期过滤我的记录,所以我写了一个像这样的查询
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'
但显示错误
从字符串
转换日期和/或时间时转换失败
答案 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'