SQL Server計算兩個時間相差的示例代碼
在 SQL Server 中,計算兩個時間字符串之間的差值
- 首先將這些字符串轉換成日期/時間類型(如 datetime 或 datetime2)
- 然后使用日期函數來計算它們之間的差異。
1、計算兩個時間字符串之間的差值
案例:計算 starttime 和 endtime 兩個時間點之間的時間差(以秒為單位)。
test 表中有以下數據:
| starttime | endtime |
|---|---|
| 2024-10-12 10:00:00 | 2024-10-12 10:30:00 |
| 2024-10-12 11:00:00 | 2024-10-12 11:45:00 |
以下是完整的 SQL 語句:
SELECT DATEDIFF(SECOND, CAST(starttime AS DATETIME), CAST(endtime AS DATETIME)) AS "時間差" FROM test;
解釋
- CAST(starttime AS DATETIME):將 starttime 字符串轉換為 DATETIME 類型。
- CAST(endtime AS DATETIME):將 endtime 字符串轉換為 DATETIME 類型。
- DATEDIFF(SECOND, …):計算兩個 DATETIME 值之間的秒數差。
執(zhí)行上述查詢后,結果將是:
| 時間差 |
|---|
| 1800 |
| 2700 |
2、字符串轉換成日期/時間類型
假設 starttime 是一個 VARCHAR 類型的列,存儲了形如 ‘2024-10-12 10:00:00’ 的字符串
SELECT CAST(starttime AS DATETIME) AS StartTimeAsDatetime FROM test;
test是包含 starttime 列的表名。查詢會返回一個新的列 StartTimeAsDatetime,其中包含了轉換后的 DATETIME 值。
- 如果 starttime 的格式是 ‘yyyy-MM-dd HH:mm:ss’,那么可以直接轉換。
- 如果 starttime 的格式不正確,CAST 會失敗并拋出錯誤。在這種情況下,你可能需要使用 CONVERT 函數,并指定樣式代碼來正確解析日期時間字符串。
例如,如果 starttime 的格式是 ‘MM/dd/yyyy HH:mm:ss’ , ‘10/12/2024 12:09:36’ 的字符串
SELECT CONVERT(DATETIME, starttime, 2) AS StartTimeAsDatetime FROM test;
2 是樣式代碼,表示輸入的日期時間字符串格式為 'MM/dd/yyyy HH:mm:ss'
樣式代碼 2 實際上對應的是 'yy.mm.dd' 格式的日期,而不是包含時間部分的完整日期時間。
如果你的 starttime 字符串包含了時間部分,并且格式是 'MM/dd/yyyy HH:mm:ss',你應該使用樣式代碼 102 或其他適當的樣式代碼。
以下是一些常見的日期時間樣式代碼:
| 樣式代碼 | 日期格式 |
|---|---|
| 102 | mm/dd/yyyy |
| 103 | dd/mm/yyyy |
| 104 | dd.mm.yyyy |
| 105 | dd-mm-yyyy |
| 106 | dd mon yyyy |
| 107 | mon dd, yyyy |
| 108 | hh:mi:ss |
| 109 | mon dd yyyy hh:mi:ss:mmmAM (or PM) |
| 110 | mm-dd-yyyy |
| 111 | yyyy/mm/dd |
| 112 | yyyymmdd |
| 113 | dd mmm yyyy hh:mi:ss:mmm(24h) |
假設你的 starttime 字符串格式是 ‘MM/dd/yyyy HH:mm:ss’,你可以這樣使用 CONVERT:
SELECT CONVERT(DATETIME, starttime, 102) AS StartTimeAsDatetime FROM test;
3、計算兩個日期和時間之間的差值
案例:
計算 startdate 和 enddate 兩個日期之間的天數差。
test 表中有以下數據:
| startdate | enddate |
|---|---|
| 2024-10-12 | 2024-10-15 |
| 2024-10-18 | 2024-10-22 |
SELECT DATEDIFF(DAY, startdate, enddate) AS "天數差" FROM test;
- DATEDIFF(DAY, startdate, enddate):計算 startdate 和 enddate 之間的天數差。
- AS “天數差”:為結果列指定一個別名,使其更具可讀性。
執(zhí)行上述查詢后,結果將是:
| 天數差 |
|---|
| 3 |
| 4 |
模板
select DATEDIFF(unit, startdate, enddate) from test
- unit 是時間單位,可以是 SECOND, MINUTE, HOUR, DAY, MONTH, YEAR 等。
- startdate 和 enddate 是你要比較的兩個日期/時間值。
- 第二個日期比第一個日期早,結果將是一個負數
到此這篇關于SQL Server計算兩個時間相差的示例代碼的文章就介紹到這了,更多相關SQL Server計算時間差內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
mssql查找備注(text,ntext)類型字段為空的方法
在sql語句中,如果查找某個文本字段值為空的,可以用select * from 表 where 字段='' ,但是如果這個字段數據類型是text或者ntext,那上面的sql語句就要出錯了。2008-08-08
SQL?Server?查詢死鎖及解決死鎖的基本知識(最新整理)
在 SQL Server 中,死鎖是指兩個或多個進程互相等待對方持有的資源,從而無法繼續(xù)執(zhí)行的現象,這篇文章主要介紹了SQL?Server?查詢死鎖以及解決死鎖的基本知識,需要的朋友可以參考下2024-07-07

