我有一個表定義如下,
create table interval_test (
roll_no number not null,
start_time timestamp(6),
end_time timestamp(6),
time_interval INTERVAL DAY (9) TO SECOND (6) generated always as (end_time - start_time)
)
在插入資料..
insert into interval_test( roll_no, start_time, end_time)
values (452, CURRENT_TIMESTAMP, '02-03-22 1:20:52.096000000 PM');
這是生成的輸出
452(roll_no) 28-02-22 1:17:07.858000000 PM(start_time) 02-03-22 1:20:52.096000000 PM(end_time) 02 00:03:44.238000(time_interval)
這里計算了 time_interval 列,并以天到秒的格式顯示時間間隔 02 00:03:44.238000。
有沒有辦法可以在 SQL Server 中實作相同的功能?
我是 sql server 的新手..
uj5u.com熱心網友回復:
您可以使用DATEDIFF(),SQL Server 中沒有 INTERVAL 的等效項。
例如:
SELECT DATEDIFF(day, '2017/08/25', '2011/08/25') AS DateDiff;
會還給你
-2192
http://sqlfiddle.com/#!18/9eecb/7793
uj5u.com熱心網友回復:
Sql Server 沒有INTERVAL資料型別。
但是可以生成該格式的字串。
并且還可以在計算列中使用用戶定義函式。 (只要它是確定性 UDF)
下面的例子證明了這一點。
CREATE FUNCTION dbo.fnGetIntervalStamp ( @FromDt2 DATETIME2, @ToDt2 DATETIME2 ) RETURNS VARCHAR(30) WITH SCHEMABINDING AS BEGIN DECLARE @days INT, @ms BIGINT, @time TIME(3); SET @days = DATEDIFF(day, @FromDt2, @ToDt2); SET @ms = DATEDIFF_BIG(microsecond, CAST(@FromDt2 as TIME), CAST(@ToDt2 as TIME)); SET @time = DATEADD(ms, (@ms/10000)%1000, DATEADD(ss, @ms/10000000, 0)); RETURN CONCAT(IIF(SIGN(@days)<0,'-',' '), ABS(@days), ' ', @time); END;
create table interval_test ( roll_no int not null, start_time datetime2, end_time datetime2, time_interval as dbo.fnGetIntervalStamp(start_time, end_time) persisted );
insert into interval_test( roll_no, start_time, end_time) values (452, CURRENT_TIMESTAMP, '2022-03-02 15:20:52.0960000');
select * from interval_test
卷號 開始時間 時間結束 時間間隔 452 2022-02-28 14:31:35.9600000 2022-03-02 15:20:52.0960000 2 00:04:55.613
在這里測驗db<>fiddle
uj5u.com熱心網友回復:
盡管 SQL Server 中沒有區間型別,但實際上您可以使用該datetime型別來存盤區間。
呈現 0 零區間,因為1900-01-01 00:00:00.000
datetime它不僅支持減法運算,還支持加法運算。
declare @dttm_1 datetime = '2022-02-25 10:58:21'
declare @dttm_2 datetime = '2022-02-27 13:02:07'
declare @dttm_interval datetime
select cast(0 as datetime) as "cast(0 as datetime)"
-- 1900-01-01 00:00:00.000
set @dttm_interval = @dttm_2 - @dttm_1
select @dttm_interval as "@dttm_interval = @dttm_2 - @dttm_1"
-- 1900-01-03 02:03:46.000
select @dttm_1 @dttm_interval as "@dttm_1 @dttm_interval"
-- 2022-02-27 13:02:07.000
select datediff(hour ,0 ,@dttm_interval) as hours -- 50
,datediff(minute ,0 ,@dttm_interval) as minutes -- 3003
,datediff(second ,0 ,@dttm_interval) as seconds -- 180226
小提琴
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/435488.html
上一篇:使用like%時搜索范圍
下一篇:使用連接更新只執行那些
