SQLServer 日期函數大全

来源:http://www.cnblogs.com/zhangpengnike/archive/2016/12/01/6122588.html
-Advertisement-
Play Games

一、統計語句 1、--統計當前【>當天00點以後的數據】 2、--統計本周 3、--統計本月 4、統計當前 二、時間函數 1、當前系統日期、時間 2、dateadd 在向指定日期加上一段時間的基礎上,返回新的 datetime 值,例如:嚮日期加上2天 3、datediff 返回跨兩個指定日期的日期 ...


一、統計語句

1、--統計當前【>當天00點以後的數據】

SELECT * FROMWHERE CONVERT(Nvarchar, dateandtime, 111) = CONVERT(Nvarchar, GETDATE(), 111)   ORDER BY dateandtime DESC

2、--統計本周

SELECT * FROMWHERE datediff(week,[dateadd],getdate())=0

3、--統計本月

SELECT * FROMWHERE datediff(month,[dateadd],getdate())=0

4、統計當前

SELECT * FROMWHERE datediff(day,[dateadd],getdate())=0
Select * From [192.168.0.90].[nbbs].[dbo].[TopicCurrent] with(nolock) Where Convert(varchar(10),[CreateTime],120) = Convert(varchar(10),getDate(),120)

二、時間函數

1、當前系統日期、時間

select getdate() 

2、dateadd   在向指定日期加上一段時間的基礎上,返回新的 datetime 值,例如:嚮日期加上2天

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

3、datediff 返回跨兩個指定日期的日期和時間邊界數

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

4、datepart 返回代表指定日期的指定日期部分的整數

SELECT DATEPART(month, '2004-10-15')   --返回 10

5、datename 返回代表指定日期的指定日期部分的字元串

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

6、day(), month(),year() --可以與datepart對照一下

select 當前日期=convert(varchar(10),getdate(),120),
select 當前時間=convert(varchar(8),getdate(),114),
select datename(dw,'2004-10-15')
select 本年第多少周=datename(week,'2004-10-15'),
select 今天是周幾=datename(weekday,'2004-10-15')

7、求相差天數

select   datediff(day,'2004-01-01',getdate()) 

8、一個月第一天的

SELECT   DATEADD(mm,   DATEDIFF(mm,0,getdate()),   0) 

9、本周的星期一

SELECT   DATEADD(wk,   DATEDIFF(wk,0,getdate()),   0)  
select   dateadd(wk,datediff(wk,0,getdate()),6)  

10、一年的第一天

SELECT   DATEADD(yy,   DATEDIFF(yy,0,getdate()),   0)

11、季度的第一天

SELECT   DATEADD(qq,   DATEDIFF(qq,0,getdate()),   0)

12、當天的半夜

SELECT   DATEADD(dd,   DATEDIFF(dd,0,getdate()),   0)

13、上個月的最後一天

SELECT   dateadd(ms,-3,DATEADD(mm,  DATEDIFF(mm,0,getdate()),   0))

14、去年的最後一天

SELECT   dateadd(ms,-3,DATEADD(yy,   DATEDIFF(yy,0,getdate()),   0)) 

15、本月的最後一天

SELECT   dateadd(ms,-3,DATEADD(mm,   DATEDIFF(m,0,getdate())+1,   0))

16、本年的最後一天

SELECT   dateadd(ms,-3,DATEADD(yy,   DATEDIFF(yy,0,getdate())+1,   0))

17、本月的第一個星期一

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

18、查詢本周註冊人數

select   count(*)   from   [user]  
where   datediff(week,create_day-1,getdate())=0 

19、上周註冊人數

select   count(*)   from   [user]  
where   datediff(week,create_day-1,getdate())=1

20、本月註冊人數

select   count(*)   from   [user]  
where   datediff(month,create_day,getdate())=0 

21、上月註冊人數

select   count(*)   from   [user]  
where   datediff(month,create_day,getdate())=1

如果要效率,用一下方式

22、查詢本周註冊人數

select   count(*)   from   [user]  
where   create_day>=dateadd(day,2-datepart(weekday,getdate()),convert(varchar,getdate(),112))  
and   create_day<dateadd(day,9-datepart(weekday,getdate()),convert(varchar,getdate(),112)) 

23、上周註冊人數 

select   count(*)   from   [user]  
where   create_day>=dateadd(day,-5-datepart(weekday,getdate()),convert(varchar,getdate(),112))  
and   create_day<dateadd(day,2-datepart(weekday,getdate()),convert(varchar,getdate(),112)) 

24、本月註冊人數

select   count(*)   from   [user]  
where   create_day>=dateadd(day,1-day(getdate()),convert(varchar,getdate(),112))  
and   create_day<dateadd(month,1,dateadd(day,1-day(getdate()),convert(varchar,getdate(),112)))

25、上月註冊人數

select   count(*)   from   [user]  
where   create_day>=dateadd(month,-1,dateadd(day,1-day(getdate()),convert(varchar,getdate(),112)))  
and   create_day<dateadd(day,1-day(getdate()),convert(varchar,getdate(),112)) 

26、本周

select   count(*)   from   User  
where   datediff(dd,create_day,getdate())   <=   datepart(dw,getdate()) 

27、上周

select   count(*)   from   User  
where   datediff(dd,create_day,(getdate()   -   datepart(dw,getdate())))   <=   7

28、本月

select   count(*)   from   User  
where   datepart(mm,create_day)   =   datepart(mm,getdate()) 

29、上月

select   count(*)   from   User  
where   datepart(mm,create_day)   =   datepart(mm,getdate())   -   1

30、本周註冊人數

select   count(*)   from   [User]  
where   datediff(dd,create_day,getdate())   <=   datepart(dw,getdate()) 

31、上周註冊人數

select   count(*)   from   [User]  
where   datediff(dd,create_day,(getdate()   -   datepart(dw,getdate())))   <=   7

32、本月註冊人數

select   count(*)   from   [User]  
where   datepart(mm,create_day)   =   datepart(mm,getdate())

33、上月註冊人數

select   count(*)   from   [User]  
where   datepart(mm,create_day)   =   datepart(mm,getdate())   -   1

34、查詢今日所有

SELECT * from feedback WHERE (DATEDIFF(d,fedtime,GETDATE())=0) ORDER BY fedid DESC

month(create_day)=month(getdate())本月  

month(create_day)=month(getdate())-1   上月

 

 

 

系統函數:

系統函數
函數 參數/功能
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) Access 和 ASP 說明
Year Yy yyyy 年 1753 ~ 9999
Quarter Qq q 季 1 ~ 4
Month Mm m 月1 ~ 12
Day of year Dy y 一年的日數,一年中的第幾日 1-366
Day Dd d 日,1-31
Weekday Dw w 一周的日數,一周中的第幾日 1-7
Week Wk ww 周,一年中的第幾周 0 ~ 51
Hour Hh h 時0 ~ 23
Minute Mi n 分鐘0 ~ 59
Second Ss s 秒 0 ~ 59
Millisecond Ms - 毫秒 0 ~ 999

access 和 asp 中用date()和now()取得系統日期時間;其中DateDiff,DateAdd,DatePart也同是能用於Access和asp中,這些函數的用法也類似

舉例:

1.GetDate() 用於sql server :select GetDate()
2.DateDiff('s','2005-07-20','2005-7-25 22:56:32')返回值為 514592DateDiff('d','2005-07-20','2005-7-25 22:56:32')返回值為 53.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即2005年

Sql 取當天或當月的記錄
表中的時間格式是這樣的:2007-02-02 16:50:08.050, 如果直接和當天的時間比較,就總得不到準確數據,但是我們可以把這種格式的時間[格式化]成 2007-02-02,也就是只有年-月-日,然後把當天的時間也格式化成 年-月-日的格式.
這樣,思路就出來了!
我們格式化日期要用到 Convert()這個函數,要用到3個參數,首先來格式化當天的日期,Convert(varchar(10),getDate(),120)
這樣我們就可以把當天的日期格式化為: 2007-2-2,然後格式化資料庫表中的日期
Convert(varchar(10),TimeFiled,120),最後我們就可以用一條Sql語句得到當天的數據了.
例如:

轉自網路

程式代碼 Select * From VIEW_CountBill Where Convert(varchar(10),[time],120) = Convert(varchar(10),getDate(),120)


註意:
Convert()函數中的各個參數的意義,第一個參數,varchar(10)是目標系統所提供的數據類型,包括 bigint 和 sql_variant。不能使用用戶定義的數據類型。第二個參數是你要轉換的欄位,我這裡是[time]。最後一個就是格式了,這個值是可選的:20或者120都可以,它遵循的是[ODBC 規範],輸入/輸出樣式為:yyyy-mm-dd hh:mm:ss[.fff]
具體的可以參考Sql Server的聯機幫助!

======================================================
T-Sql查找表中當月的記錄
思路:將要查找的時間欄位用Month()函數取出其中的月份,然後再取出當前月的月份,對比就OK了
例:

程式代碼 Select * From VIEW_CountBill Where Month([time]) = Month(getDate())

 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 1 概述 在集成項目中需要應對不同環境下的安裝配置,主流操作系統大致可以分為三種:Linux、Windows以及UNIX。其中Linux備受青睞的主要原因有兩個: 首先,Linux作為自由軟體有兩個特點:一是它免費提供源碼,二是愛好者可以按照自己的需要自由修改、複製和發佈程式的源碼,並公佈在Inte ...
  • 任務目標: 編譯安裝LAMP 要求(1) 安裝一個模塊化的PHP 要求(2) 安裝一個FPM的PHP 註意PHP需要最後一個安裝,因為需要前兩者的支持. 所以這裡的安裝次序為 1.httpd 2.MariaDB 3.PHP 一、安裝包組 # yum groupinstall "Development... ...
  • 本篇博文主要講解Oracle資料庫SQL語句完整的執行順序,文中也順便稍微提一下Oracle資料庫相關的知識。 ...
  • LifeCycleState: IDLE, START, STOP, ERROR [Source]: org.apache.flume.Source 繼承LifeCycleAware{stop() + start() + getLifeCycleState()} + NamedComponent{g ...
  • 這是mongodb裡面學習的關於性能的知識點,資料庫的管理無非就是維護和優化。維護在於平時的功能維護,其中優化就包括慢查詢和性能提高了。本次文章裡面提到從索引建立到監控,比較全面的闡述了在mongodb的優化中需要的過程。希望對自己日後的工作提供方便查閱,也希望對大家有用。 ...
  • 本篇博文,作為SQL查詢性能優化的基礎,只針對查詢流程深入剖析其來龍去脈。 ...
  • 一、使用show variables 和show status 命令查看MySQL的伺服器靜態參數值和動態運行狀態信息。 二、可以使用 mysqld --verbose --help|more 查看某個參數的定義。加上 grep 過濾。 三、key_buffer_size 用於MyISAM引擎的全局 ...
  • 存儲過程是用戶定義的一系列sql語句的集合,涉及特定表或其它對象的任務,用戶可以調用存儲過程,而函數通常是資料庫已定義的方法,它接收參數並返回某種類型的值並且不涉及特定用戶表。 存儲過程和函數存在以下幾個區別: 1)一般來說,存儲過程實現的功能要複雜一點,而函數的實現的功能針對性比較強。存儲過程,功 ...
一周排行
    -Advertisement-
    Play Games
  • 示例項目結構 在 Visual Studio 中創建一個 WinForms 應用程式後,項目結構如下所示: MyWinFormsApp/ │ ├───Properties/ │ └───Settings.settings │ ├───bin/ │ ├───Debug/ │ └───Release/ ...
  • [STAThread] 特性用於需要與 COM 組件交互的應用程式,尤其是依賴單線程模型(如 Windows Forms 應用程式)的組件。在 STA 模式下,線程擁有自己的消息迴圈,這對於處理用戶界面和某些 COM 組件是必要的。 [STAThread] static void Main(stri ...
  • 在WinForm中使用全局異常捕獲處理 在WinForm應用程式中,全局異常捕獲是確保程式穩定性的關鍵。通過在Program類的Main方法中設置全局異常處理,可以有效地捕獲並處理未預見的異常,從而避免程式崩潰。 註冊全局異常事件 [STAThread] static void Main() { / ...
  • 前言 給大家推薦一款開源的 Winform 控制項庫,可以幫助我們開發更加美觀、漂亮的 WinForm 界面。 項目介紹 SunnyUI.NET 是一個基於 .NET Framework 4.0+、.NET 6、.NET 7 和 .NET 8 的 WinForm 開源控制項庫,同時也提供了工具類庫、擴展 ...
  • 說明 該文章是屬於OverallAuth2.0系列文章,每周更新一篇該系列文章(從0到1完成系統開發)。 該系統文章,我會儘量說的非常詳細,做到不管新手、老手都能看懂。 說明:OverallAuth2.0 是一個簡單、易懂、功能強大的許可權+可視化流程管理系統。 有興趣的朋友,請關註我吧(*^▽^*) ...
  • 一、下載安裝 1.下載git 必須先下載並安裝git,再TortoiseGit下載安裝 git安裝參考教程:https://blog.csdn.net/mukes/article/details/115693833 2.TortoiseGit下載與安裝 TortoiseGit,Git客戶端,32/6 ...
  • 前言 在項目開發過程中,理解數據結構和演算法如同掌握蓋房子的秘訣。演算法不僅能幫助我們編寫高效、優質的代碼,還能解決項目中遇到的各種難題。 給大家推薦一個支持C#的開源免費、新手友好的數據結構與演算法入門教程:Hello演算法。 項目介紹 《Hello Algo》是一本開源免費、新手友好的數據結構與演算法入門 ...
  • 1.生成單個Proto.bat內容 @rem Copyright 2016, Google Inc. @rem All rights reserved. @rem @rem Redistribution and use in source and binary forms, with or with ...
  • 一:背景 1. 講故事 前段時間有位朋友找到我,說他的窗體程式在客戶這邊出現了卡死,讓我幫忙看下怎麼回事?dump也生成了,既然有dump了那就上 windbg 分析吧。 二:WinDbg 分析 1. 為什麼會卡死 窗體程式的卡死,入口門檻很低,後續往下分析就不一定了,不管怎麼說先用 !clrsta ...
  • 前言 人工智慧時代,人臉識別技術已成為安全驗證、身份識別和用戶交互的關鍵工具。 給大家推薦一款.NET 開源提供了強大的人臉識別 API,工具不僅易於集成,還具備高效處理能力。 本文將介紹一款如何利用這些API,為我們的項目添加智能識別的亮點。 項目介紹 GitHub 上擁有 1.2k 星標的 C# ...