当前位置: 首页 > 面试题库 >

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

陶乐生
2023-03-14
问题内容

我试图创建一个表,如下所示,

create table table1(date1 datetime,date2 datetime);

首先,我尝试如下插入值,

insert into table1 values('21-02-2012 6:10:00 PM','01-01-2001 12:00:00 AM');

它给出了错误的说法,

无法将varchar转换为日期时间

然后,我尝试使用以下格式作为我们stackoverflow建议的帖子之一,

insert into table1 values(convert(datetime,'21-02-2012 6:10:00 PM',5)
                          ,convert(datetime,'01-01-2001 12:00:00 AM',5));

但是我仍然收到错误消息

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

有什么建议?


问题答案:

SQL Server支持多种格式-有关CAST和CONVERT的信息,请参见MSDN联机丛书。这些格式中的大多数 取决于 您所拥有的设置-因此,这些设置有时可能会起作用-有时不起作用。

解决此问题的方法是使用SQL Server支持的(略微调整的) ISO-8601日期格式 -这种格式 始终有效 -不管您使用的SQL
Server语言和dateformat设置如何。

在ISO-8601格式由SQL
Server支持有两种形式:

  • YYYYMMDD只是日期(无时间部分);注意: 没有破折号! ,那非常重要!YYYY-MM-DD不是 独立于你的SQL Server的日期格式设置,将 适用于所有情况!

或者:

  • YYYY-MM-DDTHH:MM:SS日期和时间-请在此处注意:此格式 带有 破折号(但 可以 省略),并T在的日期和时间部分之间固定为定界符DATETIME

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

因此,在您的具体情况下-使用以下字符串:

insert into table1 values('2012-02-21T18:10:00', '2012-01-01T00:00:00');

并且应该没问题(请注意:为此,您需要使用国际 24小时制 而不是12小时AM / PM格式)。

或者 :如果您使用的是SQL Server 2008 或更高版本,则也可以使用DATETIME2数据类型(而不是plain
DATETIME),并且当前数据类型INSERT将正常工作而不会出现任何问题!:-)DATETIME2更好,对转换的挑剔也少得多-
无论如何,它还是SQL Server 2008或更高版本的推荐日期/时间数据类型。

SELECT
   CAST('02-21-2012 6:10:00 PM' AS DATETIME2),     -- works just fine
   CAST('01-01-2012 12:00:00 AM' AS DATETIME2)   -- works just fine

不要问我为什么整个主题如此棘手且有些令人困惑-这就是事实。但是使用该YYYYMMDD格式时,对于SQL Server的任何版本以及SQL
Server中的任何语言和dateformat设置,都应该没问题。



 类似资料:
  • 问题内容: 我有一个相当简单的分页查询,用于从表中获取行 该参数决定结果应按哪一列排序。 和都是日期时间字段。但是是varchar字段。 对于两个datetime字段,查询运行都很好,但是当出现以下错误时: “从字符串转换日期和/或时间时转换失败。” 我遇到的问题是我没有尝试转换任何东西吗? 问题答案: 您需要将您的语句划分为多个语句: 这是因为单个语句要求所有分支都具有兼容的数据类型。由于一个字

  • 问题内容: 在SQL 9(2005)中创建了一个存储过程,此后已升级到SQL 10(2008)。从那时起,以下存储过程停止工作并引发上述错误: 传入的参数@vPortalUID包含:2A66057D-F4E5-4E2B-B2F1-38C51A96D385。我执行这样的存储过程: 它跌倒了。我也尝试过转换。仍然没有喜悦。也具有将{}括起来的价值。我如上所述以编程方式和手动方式删除了这些内容。 如果您

  • 问题内容: 我在mysql中使用NOW()获取当前日期和时间。我想将日期值转换为varchar并将其与另一个字符串连接。我该怎么做? 问题答案: 使用DATE_FORMAT()

  • 问题内容: 例如字符串: 我将把它们推回到数据库中正确的日期时间字段中,因此我需要将它们魔术化为实际的日期时间对象。 这是通过Django的ORM进行的,因此我无法使用SQL进行插入时的转换。 问题答案: 是将字符串解析为日期时间的主要例程。它可以处理各种格式,格式由你为其指定的格式字符串确定: 生成的对象是时区未使用的。 链接: 适用于strptime:Python 2和Python 3的 Py

  • 位于新加坡(时区-“亚洲/新加坡”)的我的系统从印度尼西亚(时区-“亚洲/新加坡”)的外部系统接收字符串datetime(yyyy-MM-dd HH:MM:ss)。 如何在java 1.7中将收到的String日期时间转换为UTC? 这是我的代码:

  • 问题内容: 将日期转换为JSON时,javascript会以以下格式保存日期: 但是,我不确定如何将其放入python datetime对象。我已经尝试过这些: 我相信javascript会将字符串保存为官方ISO格式,因此似乎应该有一种方法可以让python 读取它? 问题答案: 请尝试以下格式: 例如: 该的日期只是手段,它应该被解释为UTC时间,所以忽略它不会造成任何信息丢失。您可以在这里找