【问题标题】:SQL Server DateTime format from automatic export script来自自动导出脚本的 SQL Server DateTime 格式
【发布时间】:2010-12-15 10:54:50
【问题描述】:

当使用带有数据的 mssql 脚本生成时,日期时间会通过强制转换导出:

CAST(0x00009E0E0095524F AS DateTime)

有谁知道使用的是什么格式?

示例中的日期显示为2010-10-13 09:03:39.783

【问题讨论】:

    标签: sql-server datetime


    【解决方案1】:

    高 4 字节 = 从 1900 年 1 月 1 日开始的天数,低 4 字节 = 一天中的时间

    它是日期时间的内部存储,8字节为两个4字节整数,一个为全天,另一个为一天的小数。

    DECLARE @inttop bigint,  @TheValue bigint
    SET @inttop = POWER(CAST(2 AS bigint), 32)
    SET @TheValue = CAST(0x00009E0E0095524F AS bigint) 
    
    SELECT
        --days since 01 Jan 1900
        @TheValue / @inttop,
        --fractional time of day
        CAST(@TheValue % @inttop AS float) / @inttop
    
    --and confirm it
    SELECT
        DATEADD(DAY, @TheValue / @inttop, 0),
        CAST(CAST((@TheValue % @inttop) AS float) / @inttop AS datetime)
    

    【讨论】:

    • 我正在尝试将 sql server 的转储输出加载到 postgresql 中。它提供了一个日期时间作为这个演员。我最终想使用 sed 将测试转换为正确的格式,但如果我这样做
    • 删除上面我花了太长时间来编辑它。我正在使用这种技术使用 sed 将脚本从 sqlserver 更改为 postgresql,并使用 to_timestamp(((x'00009E0E0095524F'::bigint)/(2^32))::real * 86400) - 70 * Interval '1 year'给我 2010-10-12 01:05:37.5+01。我似乎有点出局 - 不知道为什么
    • 已解决 - to_timestamp((((x'00009E0E0095524F'::bigint)/(2^32))::real * 86400) + extract('epoch'from timestamp '1900-01-01 '))
    猜你喜欢
    • 1970-01-01
    • 2015-05-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多