我正在尝试转换使用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中执行此操作?
答案 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