怎么用SQL语句把两个日期间的所有日期列出一个列表

例如:"2014-1-1"和"2014-6-25",得出结果为"2014-4-1","2014-4-2"...."2014-6-25"的多条记录问题解决了:1、建立一张数... 例如:"2014-1-1"和"2014-6-25",得出结果为"2014-4-1","2014-4-2"...."2014-6-25"的多条记录
问题解决了:
1、建立一张数据表My_IDENTITY(id,int),在该表中输入100条记录0,1,...99.
2、select dateadd(day , id , @dt1) from My_IDENTITY where dateadd(day , id , @dt1) <= @dt2
3、使用2,造成dateadd(day , id , @dt1) 运算两次,因此,可以事先算出两个日期相隔的天数@n,使用select dateadd(day, id , @dt1) from My_IDENTITY where id < @n 优化。
4、表My_IDENTITY的记录数可根据情况增加,如果担心还是不够可以select (a.id * 10 + b.id) as id from GP_IDENTITY as a, (select top 10 id from GP_IDENTITY) as b order by id关联一次,由于事先知道相隔的天数,因此能够多次关联得到想要的结果
展开
 我来答
micro0369
2014-07-14 · TA获得超过1.2万个赞
知道大有可为答主
回答量:9250
采纳率:85%
帮助的人:4840万
展开全部
这个委实有点难度,看你是什么数据库了。

如果不指定数据库的话,作为通用解决方案:
可以考虑 用一个日历表 ,每天一条记录,这样 你从这个表中 就可以 查询出来了。
zhl750501
2014-07-14 · TA获得超过650个赞
知道小有建树答主
回答量:698
采纳率:100%
帮助的人:503万
展开全部
更多追问追答
追问
我这个没有数据表的
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
神级系统VVOLDA
2018-01-27
知道答主
回答量:11
采纳率:50%
帮助的人:6855
展开全部
  1. 递归法(间隔在100以内):

    DECLARE   @BDate varchar(10);   --起始日期,格式:'YYYY-MM-DD'
    DECLARE   @EDate varchar(10);   --结束日期,格式:'YYYY-MM-DD'
    SET @BDate='2014-01-01';
    SET @EDate='2014-02-25';

    --生成日期序列
    ;WITH TDAY AS
    (
    SELECT @BDate AS FDAY
    UNION ALL
    SELECT
    CONVERT(VARCHAR(10),CAST(M.FDAY AS DATETIME)+1 ,120) AS FDAY
    FROM (
    SELECT FDAY,RANK() OVER(ORDER BY FDAY DESC) AS RK
    FROM TDAY
    ) M
    WHERE (RK=1)AND(FDAY < @EDate)
    )
    SELECT *
    -- INTO #TEMP_DAYLIAT
    FROM TDAY ORDER BY FDAY;

  2. 循环法(无限制):

    DECLARE   @BDate varchar(10);   --起始日期,格式:'YYYY-MM-DD'
    DECLARE   @EDate varchar(10);   --结束日期,格式:'YYYY-MM-DD'
    SET @BDate='2014-01-01';
    SET @EDate='2014-06-25';
    --生成日期列表
    CREATE TABLE #TEMP1(FDAY VARCHAR(10));
    DECLARE @dtDay DATETIME;
    DECLARE @smDay VARCHAR(10);
    SET @smDay=@BDate;
    WHILE (@smDay<=@EDate)
    BEGIN
    INSERT INTO #TEMP1(FDAY) VALUES (@smDay);
    SET @dtDay = CAST(@smDay AS DATETIME);
    SET @smDay= CONVERT(VARCHAR(10),@dtDay+1 ,120);
    END;
    SELECT * FROM #TEMP1;
    DROP TABLE #TEMP1;

已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式