sql中時間日期操作(時間日期函數,時間日期格式,時間日期轉換參數,時間日期比較,時間日期計算)

來源:互聯網
上載者:User

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)

本文出自 “java技術學習” 部落格,轉載請與作者聯絡!

相關文章

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.