0

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

CONVERT(DATETIME,PERIOD,102);

 CONVERT(DATETIME,PERIOD,120);

但我得到一个

SqlException:“将表达式转换为数据类型日期时间的算术溢出错误。”

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

"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

4 回答 4

3

因为它是 yyyymmdd,所以你需要

CONVERT(DATETIME, PERIOD, 112)

看看CAST AND CONVERT

于 2012-09-24T12:19:54.733 回答
2

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

CONVERT(DATETIME, 20120701, 102) - overflow
CONVERT(DATETIME,'20120701',102) - ok
于 2012-09-24T12:26:26.950 回答
0
select Convert(date,CONVERT(DATETIME,'20120701',102));

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

于 2012-09-24T12:29:22.737 回答
0
declare @dt varchar(100)='20120701'
select convert(datetime,@dt)
于 2012-09-24T12:42:02.477 回答