SQL Server:将varchar数据类型转换为日期时间数据类型会导致超出范围的值

时间:2014-12-02 07:02:54

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

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

表:ft

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数据类型转换为日期时间数据类型会导致超出范围的值。

1 个答案:

答案 0 :(得分:3)

这完全取决于转换和数据类型。

首先,隐式转换很危险。要知道,请看一下这个链接:How does SQL Server decide format for implicit datetime conversion?

我通常使用以下格式:' YYYYMMDD HH:mm:ss'

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

无法在datetime类型中存储唯一时间。如果出于任何原因,你真的需要这样做,你必须在过去做的事情,比如datetime是唯一可用的类型,并用默认日期插入你的时间,如19000101。

此:

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

将会是这样的:

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