【问题标题】:SQL Server: the conversion of a varchar data type to a datetime data type resulted in an out-of-range valueSQL Server:将 varchar 数据类型转换为 datetime 数据类型导致值超出范围
【发布时间】:2014-12-02 07:02:53
【问题描述】:

我想用两种方式插入日期和时间,如下所示:

表:英尺

create table ft
(
   columndate datetime,
   columntime datetime
)

记录插入:格式1

insert into ft values('2014-12-25', '01:55:56');

记录插入:格式2

insert into ft values('25-12-2014', '01:45:54');

注意:是的!当然,我只想为columndate 的第一列插入日期,为columntime 的第二列插入时间,我想为此使用datetime 数据类型。对于这两种插入格式,我都会遇到相同的错误,如下所示:

错误:

将 varchar 数据类型转换为 datetime 数据类型导致值超出范围。

【问题讨论】:

  • 什么是 25 小时可能会出现错误
  • 对不起!那是错字。我很抱歉。
  • 在第一个查询中,您以YYYY-MMM-DD 格式输入日期,但在第二个插入中,您将插入提供为DD-MM-YYYY,这会给您带来错误
  • 如果您只想存储时间,为什么还要使用DATETIME?使用最合适的数据类型 - TIME(n) !!
  • 你应该使用你正在使用的任何运行时的参数,这样更容易处理。

标签: sql-server datetime sql-server-2008-r2


【解决方案1】:

这都是关于转换和数据类型的。

首先,隐式转换是危险的。只是想知道,看看这个链接:How does SQL Server decide format for implicit datetime conversion?

我通常使用这种格式:'YYYYMMDD HH:mm:ss'

只存储日期不是问题,但正如评论中所建议的,我建议使用日期类型和时间类型。

不能仅以日期时间类型存储时间。如果出于某种原因,您确实需要这样做,您必须像过去那样,当 datetime 是唯一可用的类型时,并使用默认日期插入您的时间,例如 19000101。

这个:

insert into ft values('2014-12-25', '01:55:56');

会是这样的:

insert into ft values('20141225', '19000101 01:55:56');

【讨论】:

    猜你喜欢
    • 2014-01-17
    • 2011-11-12
    • 2016-02-08
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多