转换datetime的算术溢出错误

时间:2014-10-16 23:50:03

标签: sql sql-server

我有一个表格,以nd / mm / yyyy的格式存储nvarchar中的日期信息,当我使用Convert(nvarchar(100),dt,101)将此列转换为datetime时,它没有任何表格问题,但是当我想从中选择前x行时,我收到以下错误:

  

消息8115,级别16,状态2,将表达式转换为数据类型datetime的算术溢出错误。

以下是我的代码示例:

declare @d as nvarchar(100);
SET @d='20/11/2012'

SELECT
    top  1  @d,
    (select date_diff = DATEDIFF(
        day, 
        CAST(Convert(nvarchar(100), @d, 101) as DateTime),
        '2014-10-01 00:00:00')) d

1 个答案:

答案 0 :(得分:2)

这只是SQL将第一个日期时间解释为2012年第20个月的第11天。

尝试使用SQL的preferred日期格式之一。

我首选的格式是dd-MMM-yyyy,因为它永远不会含糊不清:

declare @d as nvarchar(100);
SET @d='20-Nov-2012'


SELECT
    top  1  @d,
    (select date_diff = DATEDIFF(
        day, 
        CAST(Convert(nvarchar(100), @d, 101) as DateTime),
        '01-OCt-2014 00:00:00')) d

SQL根据语言选择date format

您也可以明确告诉它在您的查询中使用dmy格式,如下所示:

SET DATEFORMAT 'dmy'

根据以下评论,我推断出这种疑问:

--Pretending to be some table in the database with varchar dates :(
create table #test (dt varchar(100))
insert #test values ('20/11/2012')


SET DATEFORMAT 'dmy'    --Works
--SET DATEFORMAT 'mdy'  --Doesn't Work

SELECT
    top  1  dt,
    (select date_diff = DATEDIFF(
        day, 
        CAST(Convert(nvarchar(100), dt, 101) as DateTime),
        '2014-10-01 00:00:00')) d
from #test

drop table #test 

但是在我们从表中选择varchar日期的情况下,设置日期格式正确就是问题。尝试使用不同的dateformat s进行测试。