zoukankan      html  css  js  c++  java
  • sql中对时间进行操作

    sql中对时间进行操作,需要掌握四个时间函数:dateadd,datediff,datepart,datename

    dateadd是在指定日期上相加或相减一个时间。
    如:在指定日期添加3天select dateadd(day,3,'2010-05-06'),返回的结果2010-05-09。

    datediff是返回两个指定日期相隔的日期时间参数。
    如:select dateadd(day,'2010-05-09','2010-05-06'),返回的结果是3。

    datepart是返回指定日期的指定日期参数部分。
    如:select datepart(day,'2010-05-06'),返回的结果是6。

    datename返回指定日期的指定日期参数部分的字符串,他和datepart是有区别的,主要在week和weekday上面。
    如:select datename(weekday, '2010-05-06'),返回的结果是星期四。
    如下列结果列出指定日期在本年第多少周,当天是周几:
    select 本年第多少周=datename(week,'2010-05-06'),今天是周几=datename(weekday,'2010-05-06')

    以下代码值的收藏,关于时间日期格式,时间日期转换参数:
    select CONVERT(varchar, getdate(), 120 ) /*结果:2010-05-06 17:16:28*/

    select replace(replace(replace(CONVERT(varchar, getdate(), 120 ),'-',''),' ',''),':','')/*结果:20100506171628*/

    select CONVERT(varchar(12) , getdate(), 111 ) /*结果:2010/05/06*/

    select CONVERT(varchar(12) , getdate(), 112 ) /*结果:20100506*/

    select CONVERT(varchar(12) , getdate(), 102 ) /*结果:2010.05.06*/

    select CONVERT(varchar(12) , getdate(), 101 ) /*结果:05/06/2010*/

    select CONVERT(varchar(12) , getdate(), 103 ) /*结果:06/05/2010*/

    select CONVERT(varchar(12) , getdate(), 104 ) /*结果:06.05.2010*/

    select CONVERT(varchar(12) , getdate(), 105 ) /*结果:06-05-2010*/

    select CONVERT(varchar(12) , getdate(), 106 ) /*结果:06 05 2010*/

    select CONVERT(varchar(12) , getdate(), 107 ) /*结果:05 06, 2010 */

    select CONVERT(varchar(12) , getdate(), 108 ) /*结果:17:20:09*/

    select CONVERT(varchar(12) , getdate(), 109 ) /*结果:05  6 2010  */

    select CONVERT(varchar(12) , getdate(), 110 ) /*结果:05-06-2010*/

    select CONVERT(varchar(12) , getdate(), 113 ) /*结果:06 05 2010 1*/

    select CONVERT(varchar(12) , getdate(), 114 ) /*结果:17:19:44:123*/


    相个时间日期的大小比较一般可以使用大于小于等于号。
    如:select twRefundPrice from  twChangeRefund where Sdate <= getdate() and Edate >=getdate()

    下面列举一些比较经典的实例,更深入理解sql中时间日期操作:

    计算一个月第一天的SQL 脚本:SELECT DATEADD(mm, DATEDIFF(mm,0,getdate()), 0)
    解释:DATEDIFF(mm,0,getdate())是计算当前日期和“1900-01-0100:00:00.000”这个日期之间的月数。记住:时期和时间变量和毫秒一样是从“1900-01-01 00:00:00.000”开始计算的。

    本周的星期一:SELECT DATEADD(wk, DATEDIFF(wk,0,getdate()), 0)
    一年的第一天:SELECT DATEADD(yy, DATEDIFF(yy,0,getdate()), 0)
    季度的第一天:SELECT DATEADD(qq, DATEDIFF(qq,0,getdate()), 0)
    当天的半夜:SELECT DATEADD(dd, DATEDIFF(dd,0,getdate()), 0)
    上个月的最后一天:SELECT dateadd(ms,-3,DATEADD(mm, DATEDIFF(mm,0,getdate()), 0))
    去年的最后一天:SELECT dateadd(ms,-3,DATEADD(yy, DATEDIFF(yy,0,getdate()), 0))
    本月的最后一天:SELECT dateadd(ms,-3,DATEADD(mm, DATEDIFF(m,0,getdate())+1, 0))
    本年的最后一天:SELECT dateadd(ms,-3,DATEADD(yy, DATEDIFF(yy,0,getdate())+1, 0))
    本月的第一个星期一:select DATEADD(wk, DATEDIFF(wk,0,dateadd(dd,6-datepart(day,getdate()),getdate())), 0)

    作者:返回主页 linux运维-loring
    出处:http://www.cnblogs.com/zlf344242525/
    本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
    如果文中有什么错误,欢迎指出。以免更多的人被误导。
  • 相关阅读:
    【Lintcode】112.Remove Duplicates from Sorted List
    【Lintcode】087.Remove Node in Binary Search Tree
    【Lintcode】011.Search Range in Binary Search Tree
    【Lintcode】095.Validate Binary Search Tree
    【Lintcode】069.Binary Tree Level Order Traversal
    【Lintcode】088.Lowest Common Ancestor
    【Lintcode】094.Binary Tree Maximum Path Sum
    【算法总结】二叉树
    库(静态库和动态库)
    从尾到头打印链表
  • 原文地址:https://www.cnblogs.com/zlf344242525/p/2227251.html
Copyright © 2011-2022 走看看