SQL自定義函式實現時間轉換

2022-03-20 10:50:50 字數 1949 閱讀 2630

資料庫裡面顯示2個時間差

select datediff(minute ,'2008-11-20 19:20:00','2008-11-20 20:50:00')

這樣子得出來的是 90 分鐘

但我要顯示成 1:30分 該怎麼做,?

解決:

select convert(varchar(5),dateadd(ss, datediff(ss ,'2008-11-20 19:20:00','2008-11-20 20:50:00') ,108),108)

又問:

要是我的時間差大於24小時,那顯示出來的就不正確了阿,

應該要顯示 小時是大於 24的乙個數,而不是又回過去了阿。。

下面用自定義函式的方法解決

create

function

[dbo

].[f_second_time

] (@second

int)

returns

varchar(16)

asbegin

/*根據傳入的秒數返回秒數所對應的時間,格式為天\時\分\秒

create by cjs 2008-11-20

使用: select dbo.[f_second_time](214580)

注意:可查詢的最大秒數為35999999,即9999時59分59秒,

這與返回中cast(@hours as varchar(4))有關,如果需要更大的精度

可以在返回時改成如cast(@hours as varchar(8))

*/declare

@secs

intdeclare

@mins

intdeclare

@hours

intdeclare

@days

intset

@secs

=@second%60

--秒set@mins

=(@second

-(@second

%60))/

60/*

若中間需要減去乙個小時,則(@second-(@second%60))/60-60

*/set

@hours

=(@mins

-(@mins

%60))/

60set

@mins

=@mins

-@hours*60

---'分鐘

--如果要轉成日,用下面注釋的部分,即把/*去掉

/*set @days=(@hours-(@hours%24))/24 ---'日

set @hours=@hours-@days*24 ---'小時

return cast(@days as varchar(6))

+'日'+

cast(@hours as varchar(4))

+'時'+

cast(@mins as varchar(4))

+'分'+

cast(@secs as varchar(4))

+'秒'

*/--

如果要轉成日,用上面注釋的部分,即把*/去掉,並且把下面的返回注釋

return

cast(@hours

asvarchar(6))+'時

'+cast(@mins

asvarchar(4))+'分

'+cast(@secs

asvarchar(4))+'秒

'end

go

--呼叫

select [dbo].[f_second_time]( datediff(ss ,'2008-11-12 19:20:00','2008-11-20 20:51:00'))

以下為結果

----------------

193時31分0秒

(1 行受影響)

SQL自定義函式

建立使用者自定義函式 標量函式 create function dbo.bmrs bmh as int returns int asbegin declare bmrs int select bmrs count 工號 from 銷售人員where 部門號 bmh return bmrs endgo...

sql 自定義函式

delimiter create definer function woshow try aid bigint returns bigint 20 language sql not deterministic sql security comment string begin if aid 0 th...

SQL自定義函式

自定義函式與儲存過程的區別 存在的意義 1.能夠在select等sql語句中直接使用自定義函式,儲存過程不行。2.自定義函式可以呼叫其他函式,也可以呼叫自己 遞迴 3.可以在表列和check 約束中使用自定義函式來實現特殊列或約束 4.自定義函式不能有任何 函式 是指對具有函式外作用域 例如資料庫表...