算术溢出错误转换datetime的
问题描述:
我有一个表格,它以nvarchar格式存储日期信息(dd/mm/yyyy),当我使用Convert(nvarchar(100),dt,101)将此列转换为datetime时没有任何问题,但是,当我要选择顶部x行从什么样子,我得到了以下错误:算术溢出错误转换datetime的
Msg 8115, Level 16, State 2,Arithmetic overflow error converting expression to data type 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
答
这是只是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进行测试。
“我得到一个错误”不是一个问题描述(事实上,“错误”甚至不是一个字)。你得到了什么**特定的错误**?问题应该是具体的,而且你有错误信息在你面前 - 为什么你不把它包括在你的问题中,所以我们也有它? (请记住,以备将来的问题。) – 2014-10-16 23:58:31