在SQLServer中将字符串转换为日期,算术溢出

时间:2012-09-24 12:17:48

标签: sql sql-server

我想将此格式PERIOD(例如:20120701)中的字符串“yyyymmdd”转换为SQLServer中的日期。 所以我使用了这样的转换函数:

CONVERT(DATETIME,PERIOD,102);

 CONVERT(DATETIME,PERIOD,120);

但我得到了

  

SqlException:“将表达式转换为的算术溢出错误   数据类型datetime。“

     

这是整个查询,这还有其他错误吗?

"SELECT ACTUAL_N_WELLS, TARGET_N_WELLS, [YTD ACTUAL] AS YTD_ACTUAL, [YTD BUDGET] AS YTD_BUDGET FROM DASH_GL_DRILLING_PERF WHERE ASSET_NAME='Bu Hasa Asset' AND ( CONVERT(DATETIME,PERIOD,112) > (SELECT DATEADD(MONTH,-3,MAX(CONVERT(DATETIME,PERIOD,112))) from DASH_GL_DRILLING_PERF))");

这样做的正确方法是什么?

4 个答案:

答案 0 :(得分:3)

因为它是yyyymmdd,你需要

CONVERT(DATETIME, PERIOD, 112)

查看CAST AND CONVERT

答案 1 :(得分:2)

如果是日期格式问题,则会出现超出范围的错误,因为收到溢出错误会检查您是否使用整数

CONVERT(DATETIME, 20120701, 102) - overflow
CONVERT(DATETIME,'20120701',102) - ok

答案 2 :(得分:0)

select Convert(date,CONVERT(DATETIME,'20120701',102));

这将以日期格式转换给定时间段。

答案 3 :(得分:0)

declare @dt varchar(100)='20120701'
select convert(datetime,@dt)