sql语句,怎么将一段日期分割成每日?请高人解答。

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了sql语句,怎么将一段日期分割成每日?请高人解答。相关的知识,希望对你有一定的参考价值。

有表:T1
字段 起始日期 结束日期 类型
2014-2-1 2014-2-3 假日
2014-2-4 2014-2-7 工作
2014-2-8 2014-2-9 假日

想要的结果是:
2014-2-1 假日
2014-2-2 假日
2014-2-8 假日
2014-2-9 假日
请高人帮忙
结果应该是:
2014-2-1 假日
2014-2-2 假日
2014-2-3 假日
2014-2-8 假日
2014-2-9 假日

设置一个临时表,仅设一日期字段,里面插入所有的查询范围内的日期记录 设定为 t_date
select t2.日期,t1.类型
from T1 ,t_date t2
where t1. 起始日期<= t1.日期 and t2.日期<=t1.结束日期追问

请问高人如何写呢,我不太会。

参考技术A 想要的结果应该是:
2014-2-1 假日
2014-2-2 假日
2014-2-3 假日
2014-2-8 假日
2014-2-9 假日
吧?
不然不符合逻辑啊。

可以先取出类型='假日'的到一张临时表#T1,然后用游标一条一条记录的取,里面用日期循环,应该可以得到想要的结果。试试吧追问

是的,少些了一个

参考技术B --获取两个时间之内的所有日期
declare @sdate datetime
declare @edate datetime
set @sdate = '2012-01-01'
set @edate = '2012-12-31'

select * from
(
select dateadd(dd,num,@sdate) as nyr
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
) a order by nyr asc追问

请问我的这个题目应该怎么用写?

追答

你的假日指周六和周末吗?工作是周一到到周五吧? 加个判断就可以了。 需要帮忙写代码吗?

以下是最终的代码:

--获取两个时间之内的所有日期
declare @sdate datetime
declare @edate datetime
set @sdate = '2014-02-01'
set @edate = '2014-02-28'

select * from
(
select CONVERT(varchar(100),dateadd(dd,num,@sdate), 23) as nyr,work=case DATEPART(dw,dateadd(dd,num,@sdate)) when 1 then '假日' when 7 then '假日' else '工作' end
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
) a order by nyr asc

追问

高人
哦,不是。
是这样的,我有一个表,有数据,假日不一定是周末且假日不一定是一条。

追答

你专门有个表,这个表里是所有的假日清单列表是吧。那也不难啊,加个判断就可以了。为什么不自己试着写代码,总想我给你现成的代码

我的是判断他是周几,你只要改成在不在你的那个表或者视图就可以了

追问

如果是一条,根据您给的就会了,如果是多条,我就不会了

追答

--临时表,用于模拟你的休息日表
declare @temp table (riqi nvarchar(24))
Insert into @temp values ('2013-10-01')
Insert into @temp values ('2013-10-02')
Insert into @temp values ('2013-10-03')
Insert into @temp values ('2013-10-06')

--获取两个时间之内的所有日期
declare @sdate datetime
declare @edate datetime
set @sdate = '2013-10-01'
set @edate = '2013-10-14'

select * from
(
select CONVERT(varchar(100),dateadd(dd,num,@sdate), 23) as nyr,xiuxi=case when exists (select top 1 * from @temp where riqi=CONVERT(varchar(100),dateadd(dd,num,@sdate), 23)) then '假日' else '工作' end
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
) a order by nyr asc

本回答被提问者采纳
参考技术C 基本的SQL语句实现不了,要写存储过程。你在什么工具里编辑?能执行存储过程吗?

sql如何将字符串转为日期

采用这个命令 to_date(\'20201208\',\'yyyy-mm-dd\') 可以将20201208字符串转成日期类型2020-12-08。

好运请采纳
参考技术A SQL中将字符串转换成日期语句:日期=convert(datetime,字符串)。

CONVERT ()语句的用途是将一种数据类型的表达式转换为另一种数据类型的表达式。格式是CONVERT ( data_type [ ( length ) ] , expression [ , style ] )。

以上是关于sql语句,怎么将一段日期分割成每日?请高人解答。的主要内容,如果未能解决你的问题,请参考以下文章

Java将一段逗号分割的字符串转换成一个数组

VBA 如何将一列字符转成日期

(IT)这是怎么回事,求高人解答

[高分悬赏] sql 行列转换 请高人指点

用MATLAB将一幅图分割成4*3的小块该怎么做呢?

sql字符串转换成日期