兩個標量函數:生成與格式化
1. UNIX_TIMESTAMP:DATETIME → INT (秒數)
CREATE FUNCTION UNIX_TIMESTAMP (@ctimestamp DATETIME)
RETURNS INT
AS
BEGIN
DECLARE @return INT
SELECT @return = DATEDIFF(SECOND, {d '1970-01-01'}, @ctimestamp)
RETURN @return
END
2. FROM_UNIXTIME:INT → DATETIME
CREATE FUNCTION FROM_UNIXTIME (@ts INT)
RETURNS DATETIME
AS
BEGIN
DECLARE @return DATETIME
SELECT @return = DATEADD(SECOND, @ts, {d '1970-01-01'})
RETURN @return
END
使用範例(語法與 MySQL 一致)
SELECT dbo.UNIX_TIMESTAMP('2013-1-1') -- 回傳 1356969600
SELECT dbo.FROM_UNIXTIME(2145000000) -- 回傳 2037-11-18 09:20:00.000
注意事項
- 基準時間:UTC 1970-01-01 00:00:00
- 返回 INT 範圍:1970 ~ 2038 年(32 位元有號整數上限)
- 若需毫秒精度,可改用 BIGINT + DATEDIFF(MILLISECOND, ...)
- SQL Server 2016+ 可直接用
DATEADD(SECOND, @ts, '1970-01-01') 內建邏輯,但自訂函數利於跨版本遷移與 MySQL 相容