天天看點

sqlserver 資料庫中時間函數的建立

create function [dbo].[HtoSec](@lvalue as int)

RETURNS

int

BEGIN

DECLARE @temp int

Set @temp = @lvalue * 60 * 60

RETURN

@temp

END

create function [dbo].[GetTime](@dtmValue as datetime)

DECLARE @GMT_TIMEZONE int

SET

@GMT_TIMEZONE = 8

Set @temp = DateDiff(s, cast(‘1970-01-01 00:00:00‘ as

datetime), @dtmValue) - dbo.HToSEC(@GMT_TIMEZONE)

create function [dbo].[GetIntDate](@intValue as int)

datetime

DECLARE @temp datetime

Set @temp = DateAdd(s, @intValue +

dbo.HToSEC(@GMT_TIMEZONE), cast(‘1970-01-01 00:00:00‘ as datetime))

另外:

在sql中将時間戳轉換為時間類型

SQL裡面有個DATEADD的函數。時間戳就是一個從1970-01-01

08:00:00到時間的相隔的秒數。是以隻要把這個時間戳加上1970-01-01 08:00:00這個時間就可以得到你想要的時間了select

DATEADD(second,1268738429 + 8 * 60 * 60,‘1970-01-01 00:00:00‘)

注解:中原標準時間與GMT時間關系

     1.GMT是中央時區,北京在東8區,相差8個小時

  

          2.是以中原標準時間 =

GMT時間 + 八小時

例如:

   SELECT DATEADD(S,1160701488 + 8 *

3600,‘1970-01-01

00:00:00‘)              

--時間戳轉換成普通時間

   SELECT DATEDIFF(S,‘1970-01-01

00:00:00‘, ‘2006-10-13 09:04:48.000‘) - 8 *

3600       --普通時間轉換成時間戳

****這個語句在sql2000中就能運作,在sql2005中運作總是提示錯誤?為什麼?

oracle中時間戳的算法

擷取時間戳:

create or replace function getTimeStamp return integer is

  Result

integer;

begin

  SELECT (SYSDATE - TO_DATE(‘1970-1-1 8‘, ‘YYYY-MM-DD

HH24miss‘)) * 86400000

    + EXTRACT(SECOND FROM

SYSTIMESTAMP(3)) * 1000

 into result FROM DUAL;

  return(Result);

end getTimeStamp;

時間戳變化為日期格式:

create or replace function getDateFromTimeStamp(tsp in integer) return date

is

  Result date;

  tt    

  tt := substr(tsp, 0, 13);

  SELECT ((tt -

EXTRACT(SECOND FROM SYSTIMESTAMP(3)) * 1000) / 86400000

+

         TO_DATE(‘1970-1-1 8‘,

‘YYYY-MM-DD HH24miss‘))

    into result

FROM DUAL;

end getDateFromTimeStamp;