SQL 服务器中的字符串到日期类型转换问题

String to Date type casting issue in SQL Server

我正在尝试将字符串数据强制转换为最新日期,但它适用于某些日期,但不适用于其他日期。我正在使用 convert() 函数

例子

当我将这个值赋给 string 参数时,它工作正常

select  Convert(DATE, '01/05/2017', 101)

但是用不同但正确的日期尝试相同的代码不起作用并给出如下所示的错误

select  Convert(DATE, '13/06/2013', 101)

我收到以下错误:

Msg 241, Level 16, State 1, Line 15 Conversion failed when converting date and/or time from character string.

@Muhammad Waheed 请检查这可能对您有帮助..

select  Convert(DATE, Cast('13-Jun-2013' as date), 101) 

因为 SQL 服务器将您第二个示例中的 13 视为一个月。这就是导致错误的原因。

正如@Squirrel 在评论中提到的那样,正确的样式是 103 ,来自 docs

select  Convert(DATE, '01/05/2017', 103) as my_date;
my_date
2017-05-01

select  Convert(DATE, '13/06/2013', 103) as my_date2;

my_date2
2013-06-13

我建议永远不要将日期存储为文本,您可以创建另一个包含日期时间的列(即使这超出了问题范围)并更新该列,如下例所示:

create table test (
wrong_date_format varchar(25)
);

insert into test values 
('01/05/2017'),
('13/06/2013');

ALTER TABLE test ADD wright_date_format date;

update test set wright_date_format = Convert(DATE, wrong_date_format, 103);

Demo