SQL Server計(jì)算兩個(gè)時(shí)間相差的示例代碼
在 SQL Server 中,計(jì)算兩個(gè)時(shí)間字符串之間的差值
- 首先將這些字符串轉(zhuǎn)換成日期/時(shí)間類型(如 datetime 或 datetime2)
- 然后使用日期函數(shù)來計(jì)算它們之間的差異。
1、計(jì)算兩個(gè)時(shí)間字符串之間的差值
案例:計(jì)算 starttime 和 endtime 兩個(gè)時(shí)間點(diǎn)之間的時(shí)間差(以秒為單位)。
test 表中有以下數(shù)據(jù):
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 語(yǔ)句:
SELECT DATEDIFF(SECOND, CAST(starttime AS DATETIME), CAST(endtime AS DATETIME)) AS "時(shí)間差" FROM test;
解釋
- CAST(starttime AS DATETIME):將 starttime 字符串轉(zhuǎn)換為 DATETIME 類型。
- CAST(endtime AS DATETIME):將 endtime 字符串轉(zhuǎn)換為 DATETIME 類型。
- DATEDIFF(SECOND, …):計(jì)算兩個(gè) DATETIME 值之間的秒數(shù)差。
執(zhí)行上述查詢后,結(jié)果將是:
時(shí)間差 |
---|
1800 |
2700 |
2、字符串轉(zhuǎn)換成日期/時(shí)間類型
假設(shè) starttime 是一個(gè) VARCHAR 類型的列,存儲(chǔ)了形如 ‘2024-10-12 10:00:00’ 的字符串
SELECT CAST(starttime AS DATETIME) AS StartTimeAsDatetime FROM test;
test是包含 starttime 列的表名。查詢會(huì)返回一個(gè)新的列 StartTimeAsDatetime,其中包含了轉(zhuǎn)換后的 DATETIME 值。
- 如果 starttime 的格式是 ‘yyyy-MM-dd HH:mm:ss’,那么可以直接轉(zhuǎn)換。
- 如果 starttime 的格式不正確,CAST 會(huì)失敗并拋出錯(cuò)誤。在這種情況下,你可能需要使用 CONVERT 函數(shù),并指定樣式代碼來正確解析日期時(shí)間字符串。
例如,如果 starttime 的格式是 ‘MM/dd/yyyy HH:mm:ss’ , ‘10/12/2024 12:09:36’ 的字符串
SELECT CONVERT(DATETIME, starttime, 2) AS StartTimeAsDatetime FROM test;
2 是樣式代碼,表示輸入的日期時(shí)間字符串格式為 'MM/dd/yyyy HH:mm:ss'
樣式代碼 2 實(shí)際上對(duì)應(yīng)的是 'yy.mm.dd' 格式的日期,而不是包含時(shí)間部分的完整日期時(shí)間。
如果你的 starttime 字符串包含了時(shí)間部分,并且格式是 'MM/dd/yyyy HH:mm:ss',你應(yīng)該使用樣式代碼 102 或其他適當(dāng)?shù)臉邮酱a。
以下是一些常見的日期時(shí)間樣式代碼:
樣式代碼 | 日期格式 |
---|---|
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) |
假設(shè)你的 starttime 字符串格式是 ‘MM/dd/yyyy HH:mm:ss’,你可以這樣使用 CONVERT:
SELECT CONVERT(DATETIME, starttime, 102) AS StartTimeAsDatetime FROM test;
3、計(jì)算兩個(gè)日期和時(shí)間之間的差值
案例:
計(jì)算 startdate 和 enddate 兩個(gè)日期之間的天數(shù)差。
test 表中有以下數(shù)據(jù):
startdate | enddate |
---|---|
2024-10-12 | 2024-10-15 |
2024-10-18 | 2024-10-22 |
SELECT DATEDIFF(DAY, startdate, enddate) AS "天數(shù)差" FROM test;
- DATEDIFF(DAY, startdate, enddate):計(jì)算 startdate 和 enddate 之間的天數(shù)差。
- AS “天數(shù)差”:為結(jié)果列指定一個(gè)別名,使其更具可讀性。
執(zhí)行上述查詢后,結(jié)果將是:
天數(shù)差 |
---|
3 |
4 |
模板
select DATEDIFF(unit, startdate, enddate) from test
- unit 是時(shí)間單位,可以是 SECOND, MINUTE, HOUR, DAY, MONTH, YEAR 等。
- startdate 和 enddate 是你要比較的兩個(gè)日期/時(shí)間值。
- 第二個(gè)日期比第一個(gè)日期早,結(jié)果將是一個(gè)負(fù)數(shù)
到此這篇關(guān)于SQL Server計(jì)算兩個(gè)時(shí)間相差的示例代碼的文章就介紹到這了,更多相關(guān)SQL Server計(jì)算時(shí)間差內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
sqlserver 觸發(fā)器學(xué)習(xí)(實(shí)現(xiàn)自動(dòng)編號(hào))
前段時(shí)間需要用觸發(fā)器做個(gè)實(shí)現(xiàn)數(shù)據(jù)插入表時(shí)自動(dòng)編號(hào)的功能,于是再學(xué)習(xí)下觸發(fā)器,硬件備份共享于此,以供討論,以免遺忘2012-08-08mssql查找備注(text,ntext)類型字段為空的方法
在sql語(yǔ)句中,如果查找某個(gè)文本字段值為空的,可以用select * from 表 where 字段='' ,但是如果這個(gè)字段數(shù)據(jù)類型是text或者ntext,那上面的sql語(yǔ)句就要出錯(cuò)了。2008-08-08命令行啟動(dòng)mssqlserver服務(wù)的方法示例
這篇文章主要介紹了命令行啟動(dòng)mssqlserver服務(wù)的方法,大家參考使用2013-11-11SQL?Server查詢結(jié)果導(dǎo)出到EXCEL表格的圖文教程
相信大家常常會(huì)遇到將SqlServer查詢結(jié)果導(dǎo)出到Excel的問題,下面這篇文章主要給大家給大家介紹了SQL?Server查詢結(jié)果導(dǎo)出到EXCEL表格的相關(guān)資料,文中通過圖文介紹的非常詳細(xì),需要的朋友可以參考下2022-08-08SQL?Server?查詢死鎖及解決死鎖的基本知識(shí)(最新整理)
在 SQL Server 中,死鎖是指兩個(gè)或多個(gè)進(jìn)程互相等待對(duì)方持有的資源,從而無(wú)法繼續(xù)執(zhí)行的現(xiàn)象,這篇文章主要介紹了SQL?Server?查詢死鎖以及解決死鎖的基本知識(shí),需要的朋友可以參考下2024-07-07大型項(xiàng)目中Java連接MSSQL的性能優(yōu)化
在大型項(xiàng)目中,Java語(yǔ)言和MSSQL數(shù)據(jù)庫(kù)的結(jié)合應(yīng)用變得越來越流行,這不但是因?yàn)镴ava語(yǔ)言提供高度可移植性和高效處理大量數(shù)據(jù)的優(yōu)勢(shì),而且MSSQL具備高效便捷的存儲(chǔ)和數(shù)據(jù)查詢能力,今天我們將討論如何在Java項(xiàng)目中與MSSQL數(shù)據(jù)庫(kù)進(jìn)行交互2024-02-02