作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我需要在 T-SQL SELECT 语句(在 SQL Server 2000 上)中将 SQL Server DATETIME 值转换为 FILETIME。有内置函数可以做到这一点吗?如果没有,有人可以帮我弄清楚如何将此转换例程实现为 UDF(或只是简单的 Transact-SQL)吗?以下是我所知道的:
我找到了几个示例,展示了如何将 FILETIME 值转换为 T-SQL DATETIME(尽管我不能 100% 确定它们是准确的),但找不到任何有关反向转换的信息。即使是一般的想法(或算法)也会有帮助。
最佳答案
好吧,我想我自己能够实现这个。这是函数:
IF EXISTS
(
SELECT 1
FROM sysobjects
WHERE id = OBJECT_ID('[dbo].[fnDateTimeToFileTime]')
AND type = 'FN'
)
BEGIN
DROP FUNCTION [dbo].[fnDateTimeToFileTime]
END
GO
-- Create function.
CREATE FUNCTION [dbo].[fnDateTimeToFileTime]
(
@DateTime AS DATETIME
)
RETURNS
BIGINT
BEGIN
IF @DateTime IS NULL
RETURN NULL
DECLARE @MsecBetween1601And1970 BIGINT
DECLARE @MsecBetween1970AndDate BIGINT
SET @MsecBetween1601And1970 = 11644473600000
SET @MsecBetween1970AndDate =
DATEDIFF(ss, CAST('1970-01-01 00:00:00' as DATETIME), @DateTime) *
CAST(1000 AS BIGINT)
RETURN (@MsecBetween1601And1970 + @MsecBetween1970AndDate) * CAST(10000 AS BIGINT)
END
GO
IF @@ERROR = 0
GRANT EXECUTE ON [dbo].[fnDateTimeToFileTime] TO Public
GO
它似乎准确到 1 秒,这对我来说没问题(由于数据溢出,我无法使其更准确)。我用了TimeAndDate web tool计算日期之间的持续时间。
你觉得怎么样?
关于tsql - 如何在 T-SQL 中将 DATETIME 值转换为 FILETIME 值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2924192/
我是一名优秀的程序员,十分优秀!