从字符串转换日期和/或时间时转换失败 - 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