sql 中的時間處理問題

2022-02-26 10:12:49 字數 4966 閱讀 7855

select getdate() as '當前日期',

datename(year,getdate()) as '年',

datename(month,getdate()) as '月',

datename(day,getdate()) as '日',

datename(dw,getdate()) as '星期',

datename(week,getdate()) as '週數',

datename(hour,getdate()) as '時',

datename(minute,getdate()) as '分',

datename(second,getdate()) as '秒'

結果:2009-08-13 23:07:15.403 2009 08 13 星期四 33 23 7 15

2007-11-13

sql server2000 時間操作

1.顯示本月第一天

select dateadd(mm,datediff(mm,0,getdate()),0) 

select convert(datetime,convert(varchar(8),getdate(),120)+'01',120)

2.顯示本月最後一天

select dateadd(day,-1,convert(datetime,convert(varchar(8),dateadd(month,1,getdate()),120)+'01',120))

select dateadd(ms,-3,dateadd(mm,datediff(m,0,getdate())+1,0)) 

3.上個月的最後一天 

select dateadd(ms,-3,dateadd(mm,datediff(mm,0,getdate()),0)) 

4.本月的第乙個星期一

select dateadd(wk,datediff(wk,0, dateadd(dd,6-datepart(day,getdate()),getdate())),0)

5.本年的第一天 

select dateadd(yy,datediff(yy,0,getdate()),0) 

6.本年的最後一天 

select dateadd(ms,-3,dateadd(yy,datediff(yy,0,getdate())+1,0))

7.去年的最後一天 

select dateadd(ms,-3,dateadd(yy,datediff(yy,0,getdate()),0))

8.本季度的第一天 

select dateadd(qq,datediff(qq,0,getdate()),0)  

9.本週的星期一 

select dateadd(wk,datediff(wk,0,getdate()),0) 

10.查詢本月的記錄 

select * from tablename where datepart(mm, thedate) = datepart(mm, getdate()) and datepart(yy, thedate) = datepart(yy, getdate()) 

11.查詢本週的記錄 

select * from tablename where datepart(wk, thedate) = datepart(wk, getdate()) and datepart(yy, thedate) = datepart(yy, getdate()) 

12.查詢本季的記錄 

select * from tablename where datepart(qq, thedate) = datepart(qq, getdate()) and datepart(yy, thedate) = datepart(yy, getdate()) 

其中:getdate()是獲得系統時間的函式。

13.獲取當月總天數:

select datediff(dd,getdate(),dateadd(mm, 1, getdate()))

select datediff(day,

dateadd(mm, datediff(mm,'',getdate()), ''),

dateadd(mm, datediff(mm,'',getdate()), '1900-02-01'))

14.獲取當前為星期幾

datename(weekday, getdate())

15. 當前系統日期、時間 

select getdate() 

16. dateadd 在向指定日期加上一段時間的基礎上,返回新的 datetime 值

例如:向日期加上2天 

select dateadd(day,2,'2004-10-15') --返回:2004-10-17 00:00:00.000

17. datediff 返回跨兩個指定日期的日期和時間邊界數。

select datediff(day,'2004-09-01','2004-09-18') --返回:17

18. datepart 返回代表指定日期的指定日期部分的整數。

select datepart(month, '2004-10-15') --返回 10

年為year,月為month,日為day,小時hour,分為minute,秒為second

19. datename 返回代表指定日期的指定日期部分的字串

select datename(weekday, '2004-10-15') --返回:星期五

17. day(), month(),year() --可以與datepart對照一下

select 當前日期=convert(varchar(10),getdate(),120),當前時間=convert(varchar(8),getdate(),114) 

select datename(dw,'2004-10-15') 

select 本年第多少周=datename(week,'2004-10-15'),今天是週幾=datename(weekday,'2004-10-15')

函式 引數/功能

getdate( ) 返回系統目前的日期與時間

datediff (interval,date1,date2) 以interval 指定的方式,返回date2 與date1兩個日期之間的差值 date2-date1

dateadd (interval,number,date) 以interval指定的方式,加上number之後的日期

datepart (interval,date) 返回日期date中,interval指定部分所對應的整數值

datename (interval,date) 返回日期date中,interval指定部分所對應的字串名稱

引數 interval的設定值如下:

值 縮 寫(sql server) 說明

year yy 年 1753 ~ 9999

quarter qq 季 1 ~ 4

month mm 月1 ~ 12

day of year dy 一年的日數,一年中的第幾日 1-366

day dd 日,1-31

weekday dw 一周的日數,一周中的第幾日 1-7

week wk 周,一年中的第幾周 0 ~ 51

hour hh 時0 ~ 23

minute mi 分鐘0 ~ 59

second ss 秒 0 ~ 59

millisecond ms 毫秒 0 ~ 999

舉例:1.getdate() 用於sql server :select getdate()

2.datediff('s','2005-07-20','2005-7-25 22:56:32')返回值為 514592 秒

datediff('d','2005-07-20','2005-7-25 22:56:32')返回值為 5 天

3.datepart('w','2005-7-25 22:56:32')返回值為 2 即星期一(週日為1,週六為7)

datepart('d','2005-7-25 22:56:32')返回值為 25即25號

datepart('y','2005-7-25 22:56:32')返回值為 206即這一年中第206天

datepart('yyyy','2005-7-25 22:56:32')返回值為 2005即2023年

應用示例:

查詢某個日期之間的記錄資料:

select * from 表 where 開始時間》'2005-02-01' and 結束時間<='2005-06-05'order by id desc

查詢最近30內的記錄資料:

select * from 表 where datediff(dd,last_date,getdate())<=30 order by id desc

查詢最近一周內的點選率大於100的記錄資料:

select * from t_business_product where hit_count>100 and datediff(dw,last_date,getdate())<=7 order by id desc

查詢某一年(如2023年)的記錄資料:

select * from 表 where datepart(yy,last_date)=2006 order by id desc

或select * from 表 where datepart(year,last_date)=2006 order by id desc

如查詢系統當前年份插入的一年內的資料:

select * from 表 where datepart(yy,getdate())=datepart(yy,getdate()) order by id desc

取系統日期 並將 日期 分開 

select 當前日期=convert(varchar(10),dateadd(day,-1,getdate()),120),當前時間=convert(varchar(8),getdate(),114)

---------------------取 年月日

year(),month(),date()

處理問題的方法

1.遇到問題不要急躁,盲目的急於去解決這乙個問題。不妨冷靜思考一下,這個問題出現的原因,其他相關頁面會不會出現類似的問題,修改後對其他的頁面會不會產生影響。這樣就可以避免修改部分正常了,卻又出現了新的問題,導致工作量增大。2.對時間明確管理,要明確知道自己的工作量,能夠合理安排自己每天的工作。給自己...

下標處理問題

下標處理問題 主要是針對於插入排序演算法寫的程式,其他情況可以借鑑這些思路。數學上或者通常意義上,下標都是從1開始的,但是在多數程式語言裡面陣列下標都是從0開始的,這就很惱火了,簡單乙個下標處理起來卻異常麻煩!請看 例如 1 典型的陣列下標越界問題 假設有個陣列 a 0 a 1 我們要用插入法排序,...

ORACLE 異常處理問題處理

create or replace procedure pro people as begin select per id into v per id from people where id i id exception when no data found then v per id 1 whe...