我有一个表格,以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
答案 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进行测试。