简体   繁体   English

日期转换不适用于样式103

[英]Date convert not working with style 103

I have saved my date as a nvarchar(50) datatype in SQL Server. 我在SQL Server中将日期保存为nvarchar(50)数据类型。 When I run this query: 当我运行此查询时:

select [Client_code], Date_of_receipt 
from [T_Receving] 

I am getting output like this: 我得到这样的输出:

在此处输入图片说明

but I want to filter my records by particular date, so I wrote a query like this 但是我想按特定日期过滤记录,所以我写了一个查询

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'    

but its showing an error 但显示错误

Conversion failed when converting date and/or time from character string 从字符串转换日期和/或时间时转换失败

You clearly have some bad data. 您显然有一些不良数据。 Use try_convert() : 使用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'  ;

In SQL Server 2008, you have to work harder to find the culprits. 在SQL Server 2008中,您必须更加努力地找到罪魁祸首。 You can start with: 您可以从以下内容开始:

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]'

This will find most instances of bad formats. 这将找到大多数格式错误的实例。 If it still persists, you will have to dig deeper to find bad day or month numbers. 如果仍然存在,您将不得不更深入地挖掘以找到糟糕的日期或月份数字。

You have to convert to datetime and then convert back to varchar 您必须转换为日期时间,然后再转换回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'

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM