gpt4 book ai didi

sql - 有趣的 SQL 谜题

转载 作者:行者123 更新时间:2023-12-02 11:20:58 26 4
gpt4 key购买 nike

如果没有循环或游标,如何获取日期间隔列表并将它们转换为 1 和 0 的字符串,这样:

  • 每一位代表从 min(所有日期)到 max(所有日期)的每一天
  • 如果该天属于任何日期间隔,则该位为 1
  • 如果该天不属于任何间隔,则该位为 0

例如,如果间隔是:

  • 2011 年 1 月 1 日至 2011 年 1 月 2 日
  • 2011 年 1 月 4 日至 2011 年 1 月 5 日

那么您编写的 SQL 应输出 11011。这是您可以使用的设置脚本:

declare @TimeSpan table
(
start datetime
,finish datetime
)

-- this is a good data set, with overlapping and non-overlapping time spans
insert into @TimeSpan values ('02/02/2010', '02/02/2010')
insert into @TimeSpan values ('02/03/2010', '02/03/2010')
insert into @TimeSpan values ('02/04/2010', '02/05/2010')
insert into @TimeSpan values ('02/05/2010', '02/06/2010')
insert into @TimeSpan values ('02/07/2010', '02/09/2010')
insert into @TimeSpan values ('02/08/2010', '02/08/2010')
insert into @TimeSpan values ('02/08/2010', '02/10/2010')
insert into @TimeSpan values ('02/14/2010', '02/16/2010')

-- for this set of data, the output string would be 111111111000111

最佳答案

DECLARE @Result VARCHAR(MAX), @start DATETIME

SELECT @start= MIN(start) ,
@Result =REPLICATE('0',1+DATEDIFF(DAY,MIN(start),MAX(finish)))
FROM @TimeSpan

SELECT @Result = STUFF(@Result,
DATEDIFF(DAY,@start,start)+1,
DATEDIFF(DAY,start,finish)+1,
REPLICATE('1',1+DATEDIFF(DAY,start,finish)))
FROM @TimeSpan

SELECT @Result

关于sql - 有趣的 SQL 谜题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5680207/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com