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

时间:2012-08-20 03:56:23

标签: sql-server-2008 datetime varchar

我正在使用SQL Server 2008 R2,并且我选择了使用“脚本数据为”将表中的数据导出到SQL INSERT脚本中的选项 - > '使用列名插入'。这导致了类似于以下内容的脚本:

INSERT INTO [MyTable] ([Id],[InsertDateTime],[Firstname],[Email]) VALUES (1, '26/06/2012 2:02:25 p.m.', 'Robert', 'robert@test.com');
INSERT INTO [MyTable] ([Id],[InsertDateTime],[Firstname],[Email]) VALUES (2, '28/06/2012 4:17:21 a.m.', 'David', 'david@test.com');

如果我然后立即尝试在表的空版本上运行此生成的脚本,则会出现以下错误:

Conversion failed when converting date and/or time from character string.

2个问题:

  1. 日期/时间字符串的格式为'dd / mm / yyyy h:mm:ss'。如何告诉SQL服务器我想要转换日期/时间的字符串表示的特定格式?该脚本生成大约5000个INSERT行,所以我可以在合理的地方进行查找和替换......
  2. 为什么SQL Server甚至会生成一个无法运行的脚本?
  3. 谢谢!

1 个答案:

答案 0 :(得分:0)

首先使用set dateformat设置正确的日期部件顺序。在你的情况下“dmy”。然后替换所有“a.m.”在所有陈述中将“AM”和“p.m”改为“PM”。以下脚本工作正常:

 set dateformat dmy

 INSERT INTO [MyTable] ([Id],[InsertDateTime],[Firstname],[Email]) 
   VALUES (1, '26/06/2012 2:02:25 PM', 'Robert', 'robert@test.com');
 INSERT INTO [MyTable] ([Id],[InsertDateTime],[Firstname],[Email]) 
     VALUES (2, '28/06/2012 4:17:21 AM', 'David', 'david@test.com');