【问题标题】:Ticks in sql for 01/01/1901 00:00:0001/01/1901 00:00:00 的 sql 记号
【发布时间】:2013-01-24 17:51:33
【问题描述】:

我正在尝试使用需要刻度日期的 redgate 产品,即 634925952000000000 = 01/01/2013 00:00:00

我可以在 sql 中找到一个转换器来计算 01/01/1901 00:00:00

没有发生这种情况“datediff 函数导致溢出。分隔两个日期/时间实例的 datepart 数量太大。尝试使用 datediff 和不太精确的 datepart。”

 SELECT DATEDIFF(s, '19010101', GETDATE())*1000000

回答不,任何人都可以帮忙。

只是 01/01/1901 00:00:00 的值,因为应用程序将其用作空日期。

【问题讨论】:

    标签: sql


    【解决方案1】:

    这 2 个日期之间返回的秒数对于 datediff 数据类型而言太多,无法支持 int。我见过其他人使用分钟差,然后使用 BigInt 转换为秒。

    试试这样的:

    SELECT DATEDIFF(mi,'19010101',getDate()) * CONVERT(BIGINT,60)
    

    这是SQL Fiddle

    祝你好运。

    【讨论】:

    • OP 想要这个结果01/01/1901 00:00:00 :)
    【解决方案2】:

    试试下面的查询...可能对你有帮助...

    DECLARE @date datetime
    DECLARE @ticksperday bigint
    set @date = getdate()
    set @ticksPerDay = 864000000000
    declare @date2 datetime2 = getdate()
    declare @dateBinary binary(9) = cast(reverse(cast(@date2 as binary(9))) as binary(9))
    declare @days bigint = cast(substring(@dateBinary, 1, 3) as bigint)
    declare @time bigint = cast(substring(@dateBinary, 4, 5) as bigint)
    
    select @date as [DateTime], @date2 as [DateTime2], @days * @ticksPerDay + @time as [Ticks]
    

    【讨论】:

      【解决方案3】:

      听起来你想要datetimeconversion

      SELECT CONVERT(VARCHAR, datetick, 120) FROM supportContacts
      

      DEMO

      【讨论】:

      【解决方案4】:

      599581440000000000 是出于某种原因,上述解决方案都没有提出这个值。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-03-14
        • 2011-05-07
        • 1970-01-01
        • 2020-07-17
        • 1970-01-01
        • 2012-12-29
        相关资源
        最近更新 更多