我有一个问题
select datepart(ww, '20100208')
在返回的结果 7周 在SQL Server 2000中,但 08.02.2010 应该 6周 根据ISO 8601规范!这导致交货周计算出现问题。
我该怎么做才能根据ISO 8601获得周数值?
您现在可以在SQL 2008中轻松完成此操作,因为它现在支持isoww作为第一个datepart参数。但是,SQL 2000(或2005)中没有此功能。本文中有一个函数可以在SQL2000/2005中为您完成此功能。
万一博客离线,这里是功能。转至该帖子以了解有关ISO周和非ISO周的更多信息。
CREATE FUNCTION ISOweek (@DATE datetime) RETURNS int AS BEGIN DECLARE @ISOweek int SET @ISOweek= DATEPART(wk,@DATE)+1 -DATEPART(wk,CAST(DATEPART(yy,@DATE) as CHAR(4))+'0104') --Special cases: Jan 1-3 may belong to the previous year IF (@ISOweek=0) SET @ISOweek=dbo.ISOweek(CAST(DATEPART(yy,@DATE)-1 AS CHAR(4))+'12'+ CAST(24+DATEPART(DAY,@DATE) AS CHAR(2)))+1 --Special case: Dec 29-31 may belong to the next year IF ((DATEPART(mm,@DATE)=12) AND ((DATEPART(dd,@DATE)-DATEPART(dw,@DATE))>= 28)) SET @ISOweek=1 RETURN(@ISOweek) END