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

Posted

技术标签:

【中文标题】从字符串转换日期和/或时间时转换失败 - Visual Studio【英文标题】:Conversion failed when converting date and/or time from character string - Visual Studio 【发布时间】:2015-06-28 11:56:26 【问题描述】:

我正在尝试使用这些命令(家庭作业)将数据插入到我的数据库中:

SET IDENTITY_INSERT [dbo].[Movies] ON

INSERT INTO [dbo].[Movies] ([Id], [CategoryId], [Title], [Director], [DateReleased]) 
VALUES (1, 3, N'Titanic', N'James Cameron', N'1997‐06‐21 00:00:00')

INSERT INTO [dbo].[Movies] ([Id], [CategoryId], [Title], [Director], [DateReleased]) 
VALUES (2, 1, N'StarWars', N'George Lucas', N'1977-06‐01 00:00:00')

INSERT INTO [dbo].[Movies] ([Id], [CategoryId], [Title], [Director], [DateReleased]) 
VALUES (3, 1, N'Jurassic Park', N'Steven Spielberg', N'1993‐06‐17 00:00:00')

INSERT INTO [dbo].[Movies] ([Id], [CategoryId], [Title], [Director], [DateReleased]) 
VALUES (4, 4, N'Jaws', N'Steven Spielberg', N'1975-05-30 00:00:00')

INSERT INTO [dbo].[Movies] ([Id], [CategoryId], [Title], [Director], [DateReleased]) 
VALUES (5, 3, N'Ghost', N'Jerry Zucker', N'1990‐06-­14 00:00:00')

INSERT INTO [dbo].[Movies] ([Id], [CategoryId], [Title], [Director], [DateReleased]) 
VALUES (7, 3, N'Forrest Gump', N'Robert Zemeckis', N'1994‐06‐18 00:00:00')

INSERT INTO [dbo].[Movies] ([Id], [CategoryId], [Title], [Director], [DateReleased]) 
VALUES (8, 2, N'Ice Age', N'Chris Wedge', N'2002‐06‐26 00:00:00')

INSERT INTO [dbo].[Movies] ([Id], [CategoryId], [Title],[Director], [DateReleased]) 
VALUES (9, 2, N'Shrek', N'AndrewAdamson', N'2001‐06‐25 00:00:00')

INSERT INTO [dbo].[Movies] ([Id], [CategoryId], [Title],[Director], [DateReleased]) 
VALUES (10, 1, N'Independence Day', N'Roland Emmerich', N'1996-06-20 00:00:00')

INSERT INTO [dbo].[Movies] ([Id], [CategoryId], [Title], [Director], [DateReleased]) 
VALUES (11, 4, N'The Ring', N'Gore Verbinski', N'2002‐06‐26 00:00:00')

SET IDENTITY_INSERT [dbo].[Movies] OFF

但它总是给我一个例外:

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

【问题讨论】:

请出示您的代码...或者如果不涉及代码,请删除c#标签,因为它无关紧要。无论哪种方式,都显示架构。 好的,已修复。对不起,我的错误他们不涉及任何 C# 代码。 (这些插入是否所有都失败了?我们只需要查看一个...目前我们无法判断是第一个失败还是最后一个失败。 ..) 您在日期时间字符串中是否真的有换行符,或者这是问题在这里呈现方式的产物? 发布CREATE TABLE 脚本,否则我们不知道您是否正确定义了您的表格,其他一切都只是猜测...... 【参考方案1】:

SQL Server 支持多种格式 - 请参阅MSDN Books Online on CAST and CONVERT。这些格式中的大多数取决于您拥有的设置 - 因此,这些设置有时可能有效 - 有时无效。

解决此问题的方法是使用 SQL Server 支持的(稍作调整的)ISO-8601 日期格式 - 这种格式始终有效 - 无论您的SQL Server 语言和日期格式设置。

SQL Server 支持的ISO-8601 format 有两种形式:

YYYYMMDD 仅用于日期(无时间部分);请注意:没有破折号!,这非常重要! YYYY-MM-DD独立于 SQL Server 中的日期格式设置,并且适用于所有情况!

或:

YYYY-MM-DDTHH:MM:SS 用于日期和时间 - 请注意:此格式短划线(但它们可以省略),以及固定的T 作为日期和时间之间的分隔符DATETIME 的一部分。

这对 SQL Server 2000 和更高版本有效。

如果您使用 SQL Server 2008 或更新版本以及 DATE 数据类型(仅限 DATE - 不是 DATETIME!),那么您确实也可以使用 YYYY-MM-DD 格式并且也适用于 SQL Server 中的任何设置。

不要问我为什么整个话题如此棘手和令人困惑——事情就是这样。但是使用YYYYMMDD 格式,您应该可以适应任何版本的 SQL Server 以及 SQL Server 中的任何语言和日期格式设置。

对于 SQL Server 2008 和更新版本,如果您只需要日期部分,建议使用 DATE,如果同时需要日期和时间,则使用 DATETIME2(n)。如果可能,您应该尝试开始逐步淘汰 DATETIME 数据类型

那么在您的示例代码中 - 这个插入是否有效? (我在YYYY-MM-DD 日期和时间部分之间添加了T 分隔符

INSERT INTO [dbo].[Movies] ([Id], [CategoryId], [Title], [Director], [DateReleased]) 
VALUES (11, 4, N'The Ring', N'Gore Verbinski', N'2002‐06‐26T00:00:00')

或者,如果您只对日期本身(而不是时间)感兴趣 - 试试这个:

INSERT INTO [dbo].[Movies] ([Id], [CategoryId], [Title], [Director], [DateReleased]) 
VALUES (11, 4, N'The Ring', N'Gore Verbinski', N'20020626')

【讨论】:

【参考方案2】:

试试这个:

'2002‐06‐26 00:00:00.000'

【讨论】:

没用,但还是谢谢 :) 只是给我同样的错误。 你能给我 CREATE TABLE 脚本吗? 什么类型的 DateReleased ?

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

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

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

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

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

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

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