zoukankan      html  css  js  c++  java
  • TSQL的几个特殊用法(一)

    一:DateAdd与DateDiff的用法。
     DateAdd(interval,number,date),通过interval格式为date加上值number
     DateDiff(interval,date1,date2),计算date1和date2之间的interval差距。
     在T-SQL中,日期类型的0表示的值是1900-01-01,可以用  select convert(datetime,0)来得出。
     那么,如果要计算当前月的第一天的日期,该怎么做呢?
     思路:首先,与原始日期0 DateAdd mm<月份>格式的number后,输出的所得的mm值后月份的1号,也就是第一天。
     因此,我们可以先计算当前月与0之间的月份差:
        DateDiff(mm,0,getdate())    当前是8月份,经计算得出的结果是1303,也就是与1900-01相关1303个月。
     接着我们再在原始基础上加上这1303个月
        DateAdd(mm,1303,0)   得出的结果是:2008-08-01 00:00:00 0000
     因此:一句SQL语句可以得出:
       select DateAdd(mm,DateDiff(mm,0,getdate()),0) as 这个月第一天
    ------
     同理,跟第一天,周一,第一个月,季度第一天,一年第一天都可以同样的方式。只不过interval更改一下就可以
     例:这周的第一天:
     select DateAdd(wk,DateDiff(wk,0,getdate()),0) as 周一
     select DateAdd(yy,DateDiff(yy,0,getdate()),0) as 今年第一天
    ------
    有一个比较特殊的,当天的半夜怎么弄??
    很简单的,半夜不就==12点整么,12点整不就是另外一天了么?
    因此,
    select DateAdd(dd,DateDiff(dd,0,getdate()),0) as 当天半夜
    同样的道理,当天半夜不就是另外一天的开始么,
    和这个月的第一天这些一样,实际上当天的半夜的命题===今天的第一个小时《语文不好,感觉有点啥》
    ------
    如果这些命题都不是提的第一天,第一小时啥的,而是最后一天,最后一小时呢???
        ^_^
    ------
  • 相关阅读:
    最搞笑的“求婚”誓言
    Flex Application 初始化顺序
    LRCParser组件
    C 游戏所要看的书
    Flex3 加载进度在IE没法显示,在FF中正常
    外企面试官们爱提的十个问题
    EBS R12.1安装中文补丁包BUG:FAILED: file XLIFFLoader.class on worker [X]
    Oracle ebs 就业市场
    Oracle EBS开发基础知识
    Oracle EBS R12 运行adadmin 安装中文语言包过程中意外中断后的处理
  • 原文地址:https://www.cnblogs.com/McJeremy/p/1271584.html
Copyright © 2011-2022 走看看