如何在SQL Server中使用MS Access Dateserial,Month,Weekday

时间:2013-10-05 00:23:02

标签: sql-server-2008 ms-access

我正在尝试转换使用Dateserial,Month和Weekday函数的MS Access查询在SQL Server 2008中工作。

记录中包含以下值: [dbo_TBL_TEST]。[MFG_YYYY] =“2012” [dbo_TBL_TEST]。[MFG_WW] =“43”

以下MS Access Query表达式的结果为82。

MFG_Test_INDEX: (Month(DateSerial(Val([dbo_TBL_TEST].[MFG_YYYY]),1,1)-Weekday(DateSerial(Val([dbo_TBL_TEST].[MFG_YYYY]),1,3))+(Val([dbo_TBL_TEST].[MFG_WW])*7))+(Val([dbo_TBL_TEST].[MFG_YYYY])-2006)*12)

有没有办法在SQL Server 2008中执行此操作?

2 个答案:

答案 0 :(得分:1)

T-SQL具有MONTH()功能。它没有直接的DateSerial()等效项,但您可以将日期字符串“粘合在一起”,然后使用CAST()将其转换为相应的日期类型。代替Weekday(),您可以使用DATEPART(dw, datevalue)。有关这些和其他T-SQL日期函数的详细信息可用here

答案 1 :(得分:0)

我在SQL-Server 2008中发现了如何做到这一点.... 这将返回自2006年1月以来使用ISO 8601标准的当前年份,工作周(MFG_YYYY,MFG_WW)的月数。

DATEPART ( Month, Dateadd(weekday,+4,Dateadd(day,-1,DATEADD(DAY, 7 * MFG_WW,1,2) + DATEDIFF(DAY, 4, DATEADD(YEAR, MFG_YYYY - 1900, 7)) / 7 * 7, 1 - 8))))+((DATEPART ( Year, Dateadd(weekday,+4,Dateadd(day,-1,DATEADD(DAY, 7 * MFG_WW + DATEDIFF(DAY, 4, DATEADD(YEAR, MFG_YYYY - 1900, 7)) / 7 * 7, 1 - 8))))-2006)*12) AS MFG_Index