在 SQL Server 2000 中用月、周和工作日制作日期
Make date with month week and weekday in SQL Server 2000
在 SQL Server 2000 中,我有:
- 年份:2015,
- 月份:01,
- 周:4,
- 工作日:2
我需要:2015-01-19
我有:
- 年份:2015,
- 月份:01,
- 周:3,
- 工作日:3
我需要:2015-01-13
以此类推
提前致谢。
你所说的一个月的第一周是什么意思比较含糊,但是按照从第一天开始的一周的通用定义,你可以用日期算术来做到这一点。结果类似于:
select convert(datetime,
@year * 10000 + @month*100 + (@week - 1) * 7 + (@weekday - 1),
112)
老实说,我不能 100% 确定 SQL Server 2000 是否会正确转换日期。您可能需要先将其转换为字符串:
select convert(datetime,
cast(@year * 10000 + @month*100 + (@week - 1) * 7 + (@weekday - 1) as varchar(8)),
112)
而且,正如评论所说,您不想使用不受支持的软件。是时候升级了。
也许是这样的?
--SET DATEFIRST 7 --this is the default; but include & tweak as needed for your culture
declare @Year int = 2015
,@Month int = 01
,@Week int = 4
,@WeekDay int = 2
,@date date
set @date = CAST(cast(@year as nvarchar(4)) + '-' + cast(@month as nvarchar(2)) + '-01' as date)
set @date = DATEADD(day,(@week - datepart(week,@date)) * 7,@date)
set @date = DATEADD(day,(@weekDay - datepart(weekday,@date)) % 7,@date)
select @date --2015-01-19
select DATEPART(week,@date) --4
select DATEPART(weekday,@date) --2
在 SQL Server 2000 中,我有:
- 年份:2015,
- 月份:01,
- 周:4,
- 工作日:2
我需要:2015-01-19
我有:
- 年份:2015,
- 月份:01,
- 周:3,
- 工作日:3
我需要:2015-01-13
以此类推
提前致谢。
你所说的一个月的第一周是什么意思比较含糊,但是按照从第一天开始的一周的通用定义,你可以用日期算术来做到这一点。结果类似于:
select convert(datetime,
@year * 10000 + @month*100 + (@week - 1) * 7 + (@weekday - 1),
112)
老实说,我不能 100% 确定 SQL Server 2000 是否会正确转换日期。您可能需要先将其转换为字符串:
select convert(datetime,
cast(@year * 10000 + @month*100 + (@week - 1) * 7 + (@weekday - 1) as varchar(8)),
112)
而且,正如评论所说,您不想使用不受支持的软件。是时候升级了。
也许是这样的?
--SET DATEFIRST 7 --this is the default; but include & tweak as needed for your culture
declare @Year int = 2015
,@Month int = 01
,@Week int = 4
,@WeekDay int = 2
,@date date
set @date = CAST(cast(@year as nvarchar(4)) + '-' + cast(@month as nvarchar(2)) + '-01' as date)
set @date = DATEADD(day,(@week - datepart(week,@date)) * 7,@date)
set @date = DATEADD(day,(@weekDay - datepart(weekday,@date)) % 7,@date)
select @date --2015-01-19
select DATEPART(week,@date) --4
select DATEPART(weekday,@date) --2