zoukankan      html  css  js  c++  java
  • SQL根据日期计算当月有多少天(转)

    原文链接:https://blog.csdn.net/dobear_0922/article/details/2393235

    --1.删除测试用表
    IF OBJECT_ID(N'Test', N'U') IS NOT NULL
        DROP TABLE Test

    --2.建立测试表,并填充测试数据
    SELECT * INTO Test 
    FROM
    (
        SELECT CONVERT(DATETIME, '2008-1-1', 120) AS dt UNION ALL SELECT '2008-1-15' UNION ALL SELECT '2008-1-31'
        UNION ALL SELECT '2008-2-1' UNION ALL SELECT '2008-2-15' UNION ALL SELECT '2008-2-29'
        UNION ALL SELECT '2007-2-1' UNION ALL SELECT '2007-2-15' UNION ALL SELECT '2007-2-28'
        UNION ALL SELECT '2007-4-1' UNION ALL SELECT '2007-4-15' UNION ALL SELECT '2007-4-30'
    ) T

    --3.根据日期计算当月有多少天
    SELECT *
        --当月天数=32-[(上月最后最后一天+32天)的日期值]
        --e.g. '2008-1':32-day('2008-2-1') '2008-2':32-day('2008-3-3')
        , ds1=32-DAY(dt-DAY(dt)+32)
        
        --当月天数=当月最后一天的日期值
        --e.g. '2008-1':day('2008-1-31') '2008-2':day('2008-2-29')
        , ds2=DAY(DATEADD(mm,1,dt)-DAY(DATEADD(mm,1,dt)))    
        , ds3=DAY(DATEADD(mm, MONTH(dt), dt-DATEPART(dy,dt)))    
        , ds4=DAY(DATEADD(d, -1, CONVERT(VARCHAR(8), DATEADD(m,1,dt), 120)+'01'))

        --当月天数=本月一号到下月一号的天数差值
        --e.g. datediff(d, '2008-1-1', '2008-2-1')
        , ds5=DATEDIFF(d, DATEADD(dd,1-DAY(dt),dt), DATEADD(mm, 1, DATEADD(dd,1-DAY(dt),dt)))
        , ds6=DATEDIFF(d, DATEADD(m, DATEDIFF(m, 0, dt), 0), DATEADD(m, datediff(m, 0, dt)+1, 0))
        , ds7=DATEDIFF(d, CONVERT(VARCHAR(8), dt, 120)+'01', CONVERT(VARCHAR(8), DATEADD(m,1,dt), 120)+'01')        
    from Test

    /*
    dt                      ds1         ds2         ds3         ds4         ds5         ds6         ds7
    ----------------------- ----------- ----------- ----------- ----------- ----------- ----------- -----------
    2008-01-01 00:00:00.000 31          31          31          31          31          31          31
    2008-01-15 00:00:00.000 31          31          31          31          31          31          31
    2008-01-31 00:00:00.000 31          31          31          31          31          31          31
    2008-02-01 00:00:00.000 29          29          29          29          29          29          29
    2008-02-15 00:00:00.000 29          29          29          29          29          29          29
    2008-02-29 00:00:00.000 29          29          29          29          29          29          29
    2007-02-01 00:00:00.000 28          28          28          28          28          28          28
    2007-02-15 00:00:00.000 28          28          28          28          28          28          28
    2007-02-28 00:00:00.000 28          28          28          28          28          28          28
    2007-04-01 00:00:00.000 30          30          30          30          30          30          30
    2007-04-15 00:00:00.000 30          30          30          30          30          30          30
    2007-04-30 00:00:00.000 30          30          30          30          30          30          30

    (12 row(s) affected)
    */

    --4.删除测试表
    DROP TABLE Test
    ————————————————
    原文链接:https://blog.csdn.net/dobear_0922/article/details/2393235

    每天学习一个知识点,累积就是财富。
  • 相关阅读:
    企业使用数据库的12种姿势
    回归架构本质,重新理解微服务
    Java中随机数的产生方式与原理
    自动类型转换、强制类型转换、作用域、整型表数范围
    创建自定义类的对象数组
    CentOS上安装比较习惯的代码编辑器
    ubuntu 15.04 的安装遇到的问题及其解决方法
    算法思想篇(1)————枚举算法
    初来乍到
    Eclipse中获取html jsp 标签的属性提示信息方法
  • 原文地址:https://www.cnblogs.com/buduzhiren/p/11459521.html
Copyright © 2011-2022 走看看