zoukankan      html  css  js  c++  java
  • SQL笔试题——生成日期列表

    最近做了一份SQL笔试题,总共包括十多道题,其中最后一道题是要写一个存储过程,输入为startDate和endDate,输出为一个日期列表。

    eg:如果startDate=‘2010-01-01’,endDate=’2010-02-01’,则输出为

    date
    2010-01-01
    2010-01-02
    2010-01-03
    2010-01-29
    2010-01-30
    2010-01-31
    2010-02-01

    这样的需求我在平时的工作中没有遇到过,通过思考有了一个思路,后面就照这个思路写了存储过程。

    现在手边有电脑,在SQL Server 2005中验证了一下当时的思路,发现总的方向是对的,但细节上有不少错。

    现在把主要代码贴在下面,留个纪念(偷懒不写存储过程了,在SQL Server 2005中测试通过):

    declare @startDate datetime;
    declare @endDate datetime;
    declare @numDays int;
    
    set @startDate = '2010-01-01';
    set @endDate = '2010-02-01';
    set @numDays = datediff(day, @startDate, @endDate) + 1;
    
    With NumDays as
    (
    	select top(@numDays)
    		row_number() over(order by (select 0)) as n
    	from
    		sys.objects o1,
    		sys.objects o2
    )
    select
    	convert(varchar(10), dateadd(day, NumDays.n - 1, @startDate), 120) as date
    from
    	NumDays;

    其中对两个sys.objects进行笛卡尔积连接,是为了生成足够多的行,可以换做sys.columns等大表。如果要生成的日期跨度非常大,可以考虑对3个表进行笛卡尔积。

    其中还需要注意的是必须为这些表取别名,我这里用了o1和o2,否则会报错。

  • 相关阅读:
    图片像素与大小
    压缩概念及常见图片格式
    王强推荐的创业者的知识架构
    Python学习笔记
    个人成效提升方法之遗愿清单
    基于Jws的WebService项目
    使用XSSFWork创建的xlsx后缀Excel文件无法打开
    notepad++每行首尾添加内容
    数据抓取的艺术(一):Selenium+Phantomjs数据抓取环境配置
    使用PhantomJS实现网页截图服务
  • 原文地址:https://www.cnblogs.com/DBFocus/p/1785748.html
Copyright © 2011-2022 走看看