SQL Server時間粒度系列----第5節小時、分鐘時間粒度詳解

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

本文目錄列表:1、SQL Server小時時間粒度2、SQL Server分鐘時間粒度3、總結語4、參考清單列表SQL Server小時時間粒度 這裡說的時間粒度是指帶有小時時間部分的日期時間,這個日期時間精確度是小時的。提供將帶小時的日期時間和整數相互轉換的功能,和以前日、周、旬、季、年那樣。 ....


本文目錄列表: 1、SQL Server小時時間粒度
2、SQL Server分鐘時間粒度 3、總結語 4、參考清單列表   SQL Server小時時間粒度
         這裡說的時間粒度是指帶有小時時間部分的日期時間,這個日期時間精確度是小時的。提供將帶小時的日期時間和整數相互轉換的功能,和以前日、周、旬、季、年那樣。       實現帶小時的日期時間和整數相互轉換的功能函數,T-SQL如下:
 1 IF OBJECT_ID(N'dbo.ufn_Hours', 'FN') IS NOT NULL
 2 BEGIN
 3     DROP FUNCTION dbo.ufn_Hours;
 4 END
 5 GO
 6  
 7 --==================================
 8 -- 功能: 獲得指定的日期時間基於基準日期的總小時數(一個整數值)
 9 -- 說明: 如果指定的日期時間為NULL或者小於基準日期“1900-01-01”時,則其值預設基準日期
10 --       結果值為非負整數,從0開始計數。
11 -- 作者: XXX
12 -- 創建: yyyy-MM-dd
13 -- 修改: yyyy-MM-dd XXX 修改內容描述
14 -- 調用: SET @intHours = dbo.ufn_Hours('2008-01-14 17:45')  -- 947033
15 --==================================
16 CREATE FUNCTION dbo.ufn_Hours 
17 (
18     @dtmDate DATETIME
19 ) RETURNS INT
20     --$Encode$--
21 AS
22 BEGIN
23     SET @dtmDate = dbo.ufn_GetValidDate(@dtmDate);
24  
25     -- datepart參數也可以為hh
26     RETURN DATEDIFF(HOUR, '1900-01-01', @dtmDate)
27 END
28 GO
29  
30 IF OBJECT_ID(N'dbo.ufn_Hours2Date', 'FN') IS NOT NULL
31 BEGIN
32     DROP FUNCTION dbo.ufn_Hours2Date;
33 END
34 GO
35  
36 --==================================
37 -- 功能: 獲得一個整數值基於基準日期對應的日期時間
38 -- 說明: 如果指定的整數值為NULL或為負整數時,則其值預設為0;
39 --       如果指定的整數值大於“9999-12-31 23:00:00”對應的整數值時,則其值預設設置為“9999-12-31 23:00:00”對應的整數值
40 --       結果值為從基準日期開始計數的日期
41 -- 作者: XXX
42 -- 創建: yyyy-MM-dd
43 -- 修改: yyyy-MM-dd XXX 修改內容描述
44 -- 調用: SET @dtmDate = dbo.fn_Hours2Date(947033) -- '2008-01-14 17:00'
45 --==================================
46 CREATE FUNCTION dbo.ufn_Hours2Date 
47 (
48     @intHours INT
49 ) RETURNS DATETIME
50 AS
51 BEGIN
52     SET @intHours = dbo.ufn_GetValidDateNum(@intHours);
53  
54     DECLARE @intHoursMax AS INT;
55     SET @intHoursMax = dbo.ufn_Hours('9999-12-31 23:00:00');
56  
57     IF @intHours >= @intHoursMax
58     BEGIN
59         SET @intHours = @intHoursMax;
60     END
61  
62     -- datepart參數也可以為hh
63     RETURN DATEADD(hh, @intHours, '1900-01-01')
64 END
65 GO

 

    測試以上功能函數的效果,T-SQL如下:
1 DECLARE @dtmDate AS DATETIME;
2 SET @dtmDate = '2008-01-14 17:00:00';
3  
4 SELECT @dtmDate AS 'The Current DateTime (Precision:Hour)'
5     ,dbo.ufn_Hours(@dtmDate) AS 'The Total Of Hours Base-on Basedate "1900-01-01"'
6     ,dbo.ufn_Hours2Date(dbo.ufn_Hours(@dtmDate))AS 'Hours Basedatetime Mapping';
7 GO

 

    執行後的查詢結果如下圖   SQL Server分鐘時間粒度
         同小時時間粒度相似,這個粒度是帶有分鐘時間部分的日期時間,其精確度是分鐘的。不過使用datediff(minute, '1900-01-01', @dtmDateTime)時,@dtmDateTime最大隻能為“5983-01-24 02:07:00”,也就是datediff(minute, @starddatetime, @enddatetime)的結果值超過int的最大值(2^15 - 1),該函數就會錯的。如下圖所示的錯誤:     實現帶分鐘的日期時間和整數相互轉換的功能函數,T-SQL代碼如下:  
 1 IF OBJECT_ID(N'dbo.ufn_Minutes', 'FN') IS NOT NULL
 2 BEGIN
 3     DROP FUNCTION dbo.ufn_Minutes;
 4 END
 5 GO
 6  
 7 --==================================
 8 -- 功能: 獲得指定的日期時間基於基準日期的總小時數(一個整數值)
 9 -- 說明: 如果指定的日期時間為NULL或者小於基準日期“1900-01-01”時,則其值預設基準日期
10 --       結果值為非負整數,從0開始計數。
11 -- 作者: XXX
12 -- 創建: yyyy-MM-dd
13 -- 修改: yyyy-MM-dd XXX 修改內容描述
14 -- 調用: SET @intMinutes = dbo.ufn_Minutes('2008-01-14 17:10:00');
15 --==================================
16 CREATE FUNCTION dbo.ufn_Minutes
17 (
18     @dtmDate DATETIME
19 ) RETURNS INT
20 AS
21 BEGIN
22     SET @dtmDate = dbo.ufn_GetValidDate(@dtmDate);
23  
24     -- datepart參數也可以是mi或n
25     RETURN DATEDIFF(MINUTE, '1900-01-01', @dtmDate)
26 END
27 GO
28  
29 IF OBJECT_ID(N'dbo.ufn_Minutes2Date', 'FN') IS NOT NULL
30 BEGIN
31     DROP FUNCTION dbo.ufn_Minutes2Date;
32 END
33 GO
34  
35 --==================================
36 -- 功能: 獲得一個整數值基於基準日期對應的日期時間
37 -- 說明: 如果指定的整數值為NULL或為負整數時,則其值預設為0;
38 --       如果指定的整數值大於“5983-01-24 02:07:00”對應的整數值時,則其值預設設置為“5983-01-24 02:07:00”對應的整數值
39 --       結果值為從基準日期開始計數的日期
40 -- 作者: XXX
41 -- 創建: yyyy-MM-dd
42 -- 修改: yyyy-MM-dd XXX 修改內容描述
43 -- 調用: SET @dtmDate = dbo.ufn_Minutes2Date(56821990) -- '2008-01-14 17:10:00'
44 --==================================
45 CREATE FUNCTION dbo.ufn_Minutes2Date 
46 (
47     @intMinutes INT
48 ) RETURNS DATETIME
49 AS
50 BEGIN
51     SET @intMinutes = dbo.ufn_GetValidDateNum(@intMinutes);
52  
53     DECLARE @intMinutesMax AS INT;
54     SET @intMinutesMax = dbo.ufn_Minutes('5983-01-24 02:07:00');
55  
56     IF @intMinutes >= @intMinutesMax
57     BEGIN
58         SET @intMinutes = @intMinutesMax;
59     END
60  
61     -- datepart參數也可以是mi或n
62     RETURN DATEADD(MINUTE, @intMinutes, '1900-01-01')
63 END
64 GO

 

      測試以上功能函數的效果,T-SQL如下:
1 DECLARE @dtmDate AS DATETIME;
2 SET @dtmDate = '2008-01-14 17:10:00';
3 SELECT @dtmDate AS 'The Current DateTime (Precision:Minute)'
4     ,dbo.ufn_Minutes(@dtmDate) AS 'The Total Of Minutes Base-on Basedate "1900-01-01"'
5     ,dbo.ufn_Minutes2Date(dbo.ufn_Minutes(@dtmDate)) AS 'Minute Basedatetime Mapping'
6 GO

 

         執行後的查詢結果如下圖 註意:分鐘時間粒度僅僅提供的參考是實現,因為datediff(minute,@dtmStartDate,@dtmEndDate)返回結果值是int數據類型,受int最大值(2^15-1)的限制,建議謹慎使用。   總結語
      本文我們學習了帶時間部分(小時、分鐘)的日期時間和整數相互轉換的功能函數,也指出了帶分鐘的轉換為整數的限制。 參考清單列表

1、https://msdn.microsoft.com/zh-cn/library/ms186819(v=sql.90).aspx

2、https://msdn.microsoft.com/zh-cn/library/ms189794(v=sql.90).aspx

 


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

-Advertisement-
Play Games
更多相關文章
  • 2013年以來自己因為偷懶,少寫了很多東西,今年計劃把以前積累的總結出來。先從shell開始寫起吧。幹了快3年游戲運維,期間經常會寫一些shell本,不少腳本其實有很多可以復用的部分。按照自己的風格,如果是比較重要的腳本,腳本內容可以分為3部分:輸入部分、核心邏輯部分、輸出部分。本文主要介紹輸入部分...
  • 一、配置防火牆,開啟80埠、3306埠CentOS 7.0預設使用的是firewall作為防火牆,這裡改為iptables防火牆。1、關閉firewall:systemctl stop firewalld.service#停止firewallsystemctl disable firewalld...
  • 1、usbmouse的定義:usb滑鼠既包含usb設備(usb_device)的屬性也包含input輸入設備(input_dev)的屬性struct usb_mouse {char name[128];///USB滑鼠設備名稱char phys[64];///路徑struct usb_device ...
  • 作為低端 VPS ,大家購買搬瓦工(banwagonhost)用得最多的就是拿來科學上網了。搬瓦工可能自己也發現了這個問題,為了滿足廣大消費者的需求,因時制宜地推出了一鍵翻牆的安裝選項,在此之前還推出了 OpenVPN 的一鍵安裝,建議不要使用OpenVPN 。它VPN協議特征明顯,GFW可以非常容...
  • 系統信息arch 顯示機器的處理器架構(1)uname -m 顯示機器的處理器架構(2)uname -r 顯示正在使用的內核版本dmidecode -q 顯示硬體系統部件 - (SMBIOS / DMI)hdparm -i /dev/hda 羅列一個磁碟的架構特性hdparm -tT /dev/sd...
  • Beaglebone Black開發板安裝驅動Beaglebone Black開發板安裝驅動Beaglebone Black開發板安裝驅動
  • apache ab test使用 apache ab test使用 單獨安裝ab和htpasswd轉載自:http://www.cnblogs.com/super-d2/p/3831155.html#tophttp://blog.chinaunix.net/uid-20382003-id-30321...
  • 背景客戶的SQL Server實例上有多個廠商的資料庫,每個資料庫由各自的進行廠進行商維護,為了限定不同廠商的維護人員只能訪問自己的資料庫,現需要給各個廠商限定許可權,讓他們登錄SQL Server只能看到授權的資料庫而無法看到其他資料庫。解決方案1.先給不同的廠商創建不同的登錄名(如下以一個廠商為例...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...