0

我正在尝试将使用 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 中做到这一点?

4

2 回答 2

1

T-SQL 有一个MONTH()功能。它没有直接的DateSerial()等价物,但您可以将日期字符串“粘合在一起”,然后CAST()将其转换为适当的日期类型。而Weekday()你可以使用DATEPART(dw, datevalue). 有关这些和其他 T-SQL 日期函数的详细信息,请参见此处

于 2013-10-05T09:06:52.497 回答
0

我发现了如何在 SQL-Server 2008 中做到这一点......这将使用 ISO 8601 标准返回自 2006 年 1 月以来的当前年份、工作周(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
于 2013-10-07T13:37:22.623 回答