TSQL:从字符串转换日期和/或时间时转换失败

Posted

技术标签:

【中文标题】TSQL:从字符串转换日期和/或时间时转换失败【英文标题】:TSQL : Conversion failed when converting date and/or time from character string 【发布时间】:2018-04-12 17:27:01 【问题描述】:

我有一个正在运行的查询,但是在再次导入一个表后,我在将 Varchar 转换为 DateTime 时看到了以下问题。

运行以下查询时遇到以下问题:

select FORMAT(convert (datetime,date)  ,   'ddMMyyyy')  from  kat.[dbo].[myTable]

如果我尝试以下操作,我会看到同样的问题:

SELECT convert(datetime, date, 126) from kat.[dbo].[myTable]

我在主表中的日期遵循相同的格式:

2017-09-01

使用格式的数据屏幕截图编辑:

提前致谢,

凯特

【问题讨论】:

那么日期的格式是什么?是 yyyy-MM-dd、yyyy-dd-MM 还是 ddMMyyyy? 日期如前所述,格式如下:2017-09-01 -> yyyy-MM-dd 你没有提到,它可能是 yyyy-dd-MM,特别是因为它已经不同于你第一次提到的格式。 如果我使用 select FORMAT(convert (datetime,date) , 'yyyy-MM-dd') from kat.[dbo].[myTable] 我也看到了错误 【参考方案1】:

我实际上认为字符串不能直接转换为日期(至少在您使用 CAST 时不能)...为什么不先将字符串转换为 int 呢?

假设您的列名为 [Date],我会坚持:

SELECT
cast(DATEADD(DAY, cast([Date] as int), -2) as date) as [Date]
FROM kat.[dbo].[myTable]

如果你有不同的列名,这里是模板:

SELECT
cast(DATEADD(DAY, cast([MyColumnName] as int), -2) as date) as [MyColumnName]
FROM kat.[dbo].[myTable]

另外,我还使用 CONVERT 更新了您的代码(老实说,我很少每次都使用它,所以它可能是错误的)

SELECT convert(datetime, convert(int, [Date]), 126) from kat.[dbo].[myTable]

【讨论】:

【参考方案2】:

我在主表中的日期遵循相同的格式:

2017-09-01

您的表格中有一些具有不同格式的刺。

尝试使用以下代码捕获它们:

select *
from kat.[dbo].[myTable]
where dt not like '[1-9][0-9][0-9][0-9]-[0-1][0-9]-[0-3][0-9]';

以后不要将日期时间值存储为字符串,使用datetime/date

更新

因此,您的字符串类似于 '2017-09-01' 是不正确的 这是我的日期示例:

declare @t table (dt varchar(20));
insert into @t values ('2017-09-01');

select *
from @t
where dt not like '[1-9][0-9][0-9][0-9]-[0-1][0-9]-[0-3][0-9]';

我的代码不返回任何行,因为 '2017-09-01' 反映了您所暗示的格式,如果它返回您的所有行,则格式不同。

【讨论】:

您好 sepupic,此查询显示表的所有记录。有没有更好的方法将这些字符串转换为日期时间? 那么问题出在哪里?他们错过了分隔符什么?能举个例子吗? 我用你的字符串更新了我的答案,我的代码没有返回'2017-09-01'行,所以你的字符串不是那种格式。我重复我的问题,你的字符串的真正格式是什么? varchar 是一种数据类型,而不是一种格式。格式是 yyyy-mm-dd,如果相信 OP,但它不是你的字符串的真实格式。如果您无法确定格式,为什么不能发布您的字符串示例? 我已经用数据截图编辑了主帖

以上是关于TSQL:从字符串转换日期和/或时间时转换失败的主要内容,如果未能解决你的问题,请参考以下文章

转换输入时间时从字符串转换日期和/或时间时转换失败 | SQL, SQLSRV

从字符串转换日期和/或时间时 C# 转换失败

仅在更新期间从字符串转换日期和/或时间时转换失败

从 C# 中的字符串 SQL 转换日期和/或时间时转换失败

从字符串转换日期和/或时间时转换失败 - Visual Studio

将 C# 日期时间发送到 SQL Server - 错误“从字符串转换日期和/或时间时转换失败”