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 假日
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
sql如何将字符串转为日期
采用这个命令 to_date(\'20201208\',\'yyyy-mm-dd\') 可以将20201208字符串转成日期类型2020-12-08。好运请采纳 参考技术A SQL中将字符串转换成日期语句:日期=convert(datetime,字符串)。
CONVERT ()语句的用途是将一种数据类型的表达式转换为另一种数据类型的表达式。格式是CONVERT ( data_type [ ( length ) ] , expression [ , style ] )。
以上是关于sql语句,怎么将一段日期分割成每日?请高人解答。的主要内容,如果未能解决你的问题,请参考以下文章