sql 日期自动生成问题,紧急求救!!

linste 2009-10-04 08:15:40
生产天数30天

开始生产日期:2009-10-08
节假日: 2009-10-10 2009-10-14 2009-10-18 2009-10-19 2009-10-25 .....(有一个表存这些数据)

返回:
天数 日期(自动得出日期、排除节假日)
1 2009-10-08
2 2009-10-09
3 2009-10-11
4 2009-10-12
.... ......
...全文
199 23 打赏 收藏 转发到动态 举报
写回复
用AI写文章
23 条回复
切换为时间正序
请发表友善的回复…
发表回复
feixianxxx 2009-10-04
  • 打赏
  • 举报
回复
[Quote=引用 22 楼 linste 的回复:]
引用 20 楼 feixianxxx 的回复:
哥们 咱探讨下啦。。。

别急着结贴额


不好意思 ,给结了, 你的方法好像好点  - -、
[/Quote]
.......算了 不探讨了 。。。。。
linste 2009-10-04
  • 打赏
  • 举报
回复
[Quote=引用 20 楼 feixianxxx 的回复:]
哥们 咱探讨下啦。。。

别急着结贴额
[/Quote]

不好意思 ,给结了, 你的方法好像好点 - -、
linste 2009-10-04
  • 打赏
  • 举报
回复
[Quote=引用 18 楼 feixianxxx 的回复:]
引用 16 楼 linste 的回复:
引用 12 楼 feixianxxx 的回复:
引用 11 楼 linste 的回复:
引用 7 楼 feixianxxx 的回复:
[Quote=引用 4 楼 linste 的回复:]
大哥,非常感谢你的回复,但我们厂里经常加班调休,不能按正常的来算节假日,可能提问的时候表达不太清楚,应该说是休息日
SQL codedeclare@stable (adatetime)insert@sselect'2009-10-10'unionallselect'2009-10-14'unionallselect'2009-10-18'unionallselect'2009-10-19'unionallselect'2009-10-25'declare@datedatetime,@nintset@date='2009-10-08'set@n=30selectconvert(varchar(10),ko.kop,120)from(selectDATEADD(day,number,@date)as kopfrom master..spt_valueswhere type='p'andnumberbetween0and@n-1) koleftjoin@s konDATEDIFF(DAY,ko.kop ,k.a)=0where k.aisnull/*

(5 行受影响)

----------
2009-10-08
2009-10-09
2009-10-11
2009-10-12
2009-10-13
2009-10-15
2009-10-16
2009-10-17
2009-10-20
2009-10-21
2009-10-22
2009-10-23
2009-10-24
2009-10-26
2009-10-27
2009-10-28
2009-10-29
2009-10-30
2009-10-31
2009-11-01
2009-11-02
2009-11-03
2009-11-04
2009-11-05
2009-11-06*/


写死了,就不实用了

请问哪里死了?


insert@sselect'2009-10-10'unionallselect'2009-10-14'unionallselect'2009-10-18'unionallselect'2009-10-19'unionallselect'2009-10-25'

一个生产计划假如要生产半年,我这个休息日,一个个插入?
[/Quote]
我忍不住想问
你不一个个插入
请问你的节假日表怎么产生?
[/Quote]

- -、
feixianxxx 2009-10-04
  • 打赏
  • 举报
回复
哥们 咱探讨下啦。。。

别急着结贴额
feixianxxx 2009-10-04
  • 打赏
  • 举报
回复
你的节假日都没规律 不老老实实插
你还有什么方法呢?

学习下
feixianxxx 2009-10-04
  • 打赏
  • 举报
回复
[Quote=引用 16 楼 linste 的回复:]
引用 12 楼 feixianxxx 的回复:
引用 11 楼 linste 的回复:
引用 7 楼 feixianxxx 的回复:
[Quote=引用 4 楼 linste 的回复:]
大哥,非常感谢你的回复,但我们厂里经常加班调休,不能按正常的来算节假日,可能提问的时候表达不太清楚,应该说是休息日
SQL codedeclare@stable (adatetime)insert@sselect'2009-10-10'unionallselect'2009-10-14'unionallselect'2009-10-18'unionallselect'2009-10-19'unionallselect'2009-10-25'declare@datedatetime,@nintset@date='2009-10-08'set@n=30selectconvert(varchar(10),ko.kop,120)from(selectDATEADD(day,number,@date)as kopfrom master..spt_valueswhere type='p'andnumberbetween0and@n-1) koleftjoin@s konDATEDIFF(DAY,ko.kop ,k.a)=0where k.aisnull/*

(5 行受影响)

----------
2009-10-08
2009-10-09
2009-10-11
2009-10-12
2009-10-13
2009-10-15
2009-10-16
2009-10-17
2009-10-20
2009-10-21
2009-10-22
2009-10-23
2009-10-24
2009-10-26
2009-10-27
2009-10-28
2009-10-29
2009-10-30
2009-10-31
2009-11-01
2009-11-02
2009-11-03
2009-11-04
2009-11-05
2009-11-06*/


写死了,就不实用了

请问哪里死了?
[/Quote]

insert@sselect'2009-10-10'unionallselect'2009-10-14'unionallselect'2009-10-18'unionallselect'2009-10-19'unionallselect'2009-10-25'

一个生产计划假如要生产半年,我这个休息日,一个个插入?
[/Quote]
我忍不住想问
你不一个个插入
请问你的节假日表怎么产生?
linste 2009-10-04
  • 打赏
  • 举报
回复
[Quote=引用 15 楼 feixianxxx 的回复:]
算了 你用大乌龟的吧 。。。。。

我不说了
[/Quote]

- -'
linste 2009-10-04
  • 打赏
  • 举报
回复
[Quote=引用 12 楼 feixianxxx 的回复:]
引用 11 楼 linste 的回复:
引用 7 楼 feixianxxx 的回复:
[Quote=引用 4 楼 linste 的回复:]
大哥,非常感谢你的回复,但我们厂里经常加班调休,不能按正常的来算节假日,可能提问的时候表达不太清楚,应该说是休息日
SQL codedeclare@stable (adatetime)insert@sselect'2009-10-10'unionallselect'2009-10-14'unionallselect'2009-10-18'unionallselect'2009-10-19'unionallselect'2009-10-25'declare@datedatetime,@nintset@date='2009-10-08'set@n=30selectconvert(varchar(10),ko.kop,120)from(selectDATEADD(day,number,@date)as kopfrom master..spt_valueswhere type='p'andnumberbetween0and@n-1) koleftjoin@s konDATEDIFF(DAY,ko.kop ,k.a)=0where k.aisnull/*

(5 行受影响)

----------
2009-10-08
2009-10-09
2009-10-11
2009-10-12
2009-10-13
2009-10-15
2009-10-16
2009-10-17
2009-10-20
2009-10-21
2009-10-22
2009-10-23
2009-10-24
2009-10-26
2009-10-27
2009-10-28
2009-10-29
2009-10-30
2009-10-31
2009-11-01
2009-11-02
2009-11-03
2009-11-04
2009-11-05
2009-11-06*/


写死了,就不实用了
[/Quote]
请问哪里死了?
[/Quote]

insert@sselect'2009-10-10'unionallselect'2009-10-14'unionallselect'2009-10-18'unionallselect'2009-10-19'unionallselect'2009-10-25'

一个生产计划假如要生产半年,我这个休息日,一个个插入?
feixianxxx 2009-10-04
  • 打赏
  • 举报
回复
算了 你用大乌龟的吧 。。。。。

我不说了
feixianxxx 2009-10-04
  • 打赏
  • 举报
回复
。。。。我只是这里举个例子 你的假期表 不都自己定的么?
如果你嫌死 完全可以把这里的语句转成 函数
linste 2009-10-04
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 navy887 的回复:]
SQL code--该过程可以得出开始日期和结束日期的所有日期
--只要在后边加条件剔除你自己定义的休息日就可以了createtable Mon
(
IDintidentity(1,1),
Monvarchar(6)
)GODECLARE@BeginMonthvarchar(6),@EndMonthvarchar(6)SELECT@BeginMonth='20091001',--开始日期@¡­
[/Quote]

谢谢,和6楼一样的
feixianxxx 2009-10-04
  • 打赏
  • 举报
回复
[Quote=引用 11 楼 linste 的回复:]
引用 7 楼 feixianxxx 的回复:
[Quote=引用 4 楼 linste 的回复:]
大哥,非常感谢你的回复,但我们厂里经常加班调休,不能按正常的来算节假日,可能提问的时候表达不太清楚,应该说是休息日
SQL codedeclare@stable (adatetime)insert@sselect'2009-10-10'unionallselect'2009-10-14'unionallselect'2009-10-18'unionallselect'2009-10-19'unionallselect'2009-10-25'declare@datedatetime,@nintset@date='2009-10-08'set@n=30selectconvert(varchar(10),ko.kop,120)from(selectDATEADD(day,number,@date)as kopfrom master..spt_valueswhere type='p'andnumberbetween0and@n-1) koleftjoin@s konDATEDIFF(DAY,ko.kop ,k.a)=0where k.aisnull/*

(5 行受影响)

----------
2009-10-08
2009-10-09
2009-10-11
2009-10-12
2009-10-13
2009-10-15
2009-10-16
2009-10-17
2009-10-20
2009-10-21
2009-10-22
2009-10-23
2009-10-24
2009-10-26
2009-10-27
2009-10-28
2009-10-29
2009-10-30
2009-10-31
2009-11-01
2009-11-02
2009-11-03
2009-11-04
2009-11-05
2009-11-06*/
[/Quote]

写死了,就不实用了
[/Quote]
请问哪里死了?
linste 2009-10-04
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 feixianxxx 的回复:]
[Quote=引用 4 楼 linste 的回复:]
大哥,非常感谢你的回复,但我们厂里经常加班调休,不能按正常的来算节假日,可能提问的时候表达不太清楚,应该说是休息日
SQL code[/Quote]declare@stable (adatetime)insert@sselect'2009-10-10'unionallselect'2009-10-14'unionallselect'2009-10-18'unionallselect'2009-10-19'unionallselect'2009-10-25'declare@datedatetime,@nintset@date='2009-10-08'set@n=30selectconvert(varchar(10),ko.kop,120)from(selectDATEADD(day,number,@date)as kopfrom master..spt_valueswhere type='p'andnumberbetween0and@n-1) koleftjoin@s konDATEDIFF(DAY,ko.kop ,k.a)=0where k.aisnull/*

(5 行受影响)

----------
2009-10-08
2009-10-09
2009-10-11
2009-10-12
2009-10-13
2009-10-15
2009-10-16
2009-10-17
2009-10-20
2009-10-21
2009-10-22
2009-10-23
2009-10-24
2009-10-26
2009-10-27
2009-10-28
2009-10-29
2009-10-30
2009-10-31
2009-11-01
2009-11-02
2009-11-03
2009-11-04
2009-11-05
2009-11-06*/
[/Quote]

写死了,就不实用了
feixianxxx 2009-10-04
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 linste 的回复:]
谢谢dawugui的回复,

有点思路了,但.................

明天再搞,有点打结了........
[/Quote]
为什么无视我 。。。
看来乌龟的魅力 已经极致了
linste 2009-10-04
  • 打赏
  • 举报
回复
谢谢dawugui的回复,

有点思路了,但.................

明天再搞,有点打结了........
navy887 2009-10-04
  • 打赏
  • 举报
回复
--该过程可以得出开始日期和结束日期的所有日期
--只要在后边加条件剔除你自己定义的休息日就可以了
create table Mon
(
ID int identity(1,1),
Mon varchar(6)
)
GO

DECLARE
@BeginMonth varchar(6),
@EndMonth varchar(6)
SELECT
@BeginMonth='20091001', --开始日期
@EndMonth='20091030' --结束日期

SELECT
CONVERT(VARCHAR(8),DATEADD(day,number,@BeginMonth+'01'),112)
FROM
master..spt_values
WHERE
type='P'
and
DATEADD(day,number,@BeginMonth+'01')<=@EndMonth+'01'
feixianxxx 2009-10-04
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 linste 的回复:]
大哥,非常感谢你的回复,但我们厂里经常加班调休,不能按正常的来算节假日,可能提问的时候表达不太清楚,应该说是休息日
[/Quote]
declare @s table (a datetime)
insert @s select '2009-10-10' union all select
'2009-10-14' union all select
'2009-10-18' union all select
'2009-10-19' union all select
'2009-10-25'
declare @date datetime,@n int
set @date='2009-10-08'
set @n=30
select convert(varchar(10),ko.kop,120)
from(
select DATEADD(day,number,@date) as kop
from master..spt_values
where type='p' and number between 0 and @n-1) ko left join @s k
on DATEDIFF(DAY,ko.kop ,k.a)=0
where k.a is null
/*

(5 行受影响)

----------
2009-10-08
2009-10-09
2009-10-11
2009-10-12
2009-10-13
2009-10-15
2009-10-16
2009-10-17
2009-10-20
2009-10-21
2009-10-22
2009-10-23
2009-10-24
2009-10-26
2009-10-27
2009-10-28
2009-10-29
2009-10-30
2009-10-31
2009-11-01
2009-11-02
2009-11-03
2009-11-04
2009-11-05
2009-11-06
*/
dawugui 2009-10-04
  • 打赏
  • 举报
回复
生成个日期表,然后自己剔除你不需要的日期,一般来说,你需要自己做个剔除的日期表,把需要剔除的日期放进去,然后关联两表,not in ...

declare @sdate datetime
declare @edate datetime
set @sdate = '2009-10-08 00:00:000'
set @edate = dateadd(day,30, @sdate)

select
dateadd(dd,num,@sdate) [day]
from
(select isnull((select count(1) from sysobjects where id<t.id),0) as num from sysobjects t) a
where
dateadd(dd,num,@sdate)<=@edate
order by [day]

/*
day
------------------------------------------------------
2009-10-08 00:00:00.000
2009-10-09 00:00:00.000
2009-10-10 00:00:00.000
2009-10-11 00:00:00.000
2009-10-12 00:00:00.000
2009-10-13 00:00:00.000
2009-10-14 00:00:00.000
2009-10-15 00:00:00.000
2009-10-16 00:00:00.000
2009-10-17 00:00:00.000
2009-10-18 00:00:00.000
2009-10-19 00:00:00.000
2009-10-20 00:00:00.000
2009-10-21 00:00:00.000
2009-10-22 00:00:00.000
2009-10-23 00:00:00.000
2009-10-24 00:00:00.000
2009-10-25 00:00:00.000
2009-10-26 00:00:00.000
2009-10-27 00:00:00.000
2009-10-28 00:00:00.000
2009-10-29 00:00:00.000
2009-10-30 00:00:00.000
2009-10-31 00:00:00.000
2009-11-01 00:00:00.000
2009-11-02 00:00:00.000
2009-11-03 00:00:00.000
2009-11-04 00:00:00.000
2009-11-05 00:00:00.000
2009-11-06 00:00:00.000
2009-11-07 00:00:00.000

(所影响的行数为 31 行)


*/
linste 2009-10-04
  • 打赏
  • 举报
回复
我们这的休息日是自己设定的,不需要得出,最关键的是怎么用生产天数和休息日得到对应日期
linste 2009-10-04
  • 打赏
  • 举报
回复
大哥,非常感谢你的回复,但我们厂里经常加班调休,不能按正常的来算节假日,可能提问的时候表达不太清楚,应该说是休息日
加载更多回复(3)

27,579

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 应用实例
社区管理员
  • 应用实例社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧