【问题标题】:Is There a Way to Convert 'datetime' Format to 'timestamp' in Sql Server CE?有没有办法在 Sql Server CE 中将“日期时间”格式转换为“时间戳”?
【发布时间】:2014-03-12 23:25:44
【问题描述】:

我知道在常规的 Sql Server 中有一种方法可以做到这一点,如果我没记错的话,它看起来像这样:

SELECT UNIX_TIMESTAMP(ba_trans_entered) * 1000 AS 'dateUTC'

不过,我承认我没有得到 * 1000 部分,但这不是重点。

当我尝试在 SQL Server CE 中执行此查询时,它只会告诉我(即 WebMatrix 告诉我):

'UNIX_TIMESTAMP' is not a recognized built-in function name.

我假设 Sql Server Compact 不支持 UNIX_TIMESTAMP

另外,我尝试在 SE 上进行谷歌搜索和搜索,但没有显示与 SQL Server CE 相关的数据,因此在给定的环境中可能没有办法。

有没有办法将“日期时间”(例如:7/13/2007 12:00:00 AM)转换为时间戳(例如:1184302800000)?我知道我可以在 JavaScript 中执行此操作,但有人告诉我在查询本身中执行此操作可能会更快,而且因为我要提取大量数据...

【问题讨论】:

    标签: sql datetime timestamp sql-server-ce webmatrix


    【解决方案1】:

    在 SQL Server Compact 上的 SQL Server 中不存在 UNIX_TIMESTAMP 函数,但您可以使用 DATEDIFF:

    DATEDIFF(SECOND,{d '1970-01-01'}, ba_trans_entered)
    

    【讨论】:

    • 我需要 * 1000 吗?那是什么?
    • 转换不正确。我刚刚使用您的代码转换了以下日期:7/1/2011 12:00:00 AM,它为我提供了以下时间戳:1309478400。当我使用我的 JavaScript 函数转换它(只是为了检查它)时:var d = new Date(1309478400); 它给了我这个日期:Thu Jan 15 1970 21:44:38 GMT-0600 (Central Standard Time)。我认为也许我需要将 MILLISECOND 与 DATEDIFF 一起使用,但当我尝试时它会告诉我:Difference of two datetime columns caused overflow at runtime.
    • 哦,当我在我的 JavaScript 函数中转换日期 7/1/2011 12:00:00 AM 时:var d = new Date(1309496400000).getTime(); ,它给了我这个时间戳:1309496400000
    • @VoidKing,也许我不明白你的观点,但不同的是,ErikEJ 的函数返回秒,而 javascript Date() 语句接受毫秒。如果我尝试var d = new Date(1309478400000),它会给我Fri Jul 01 2011 02:00:00 GMT+0200 (W. Europe Daylight Time)
    • @GmG 是的,这就是问题所在。他的回答是正确的,但我不确定它对任何人有多大用处,因为我所知道的所有程序都使用以毫秒为单位的时间戳,而我不能使用 DATEDIFF(MILLISECOND,{d '1970-01-01'}, ba_trans_entered) 因为错误:Difference of two datetime columns caused overflow at runtime. 我注意到,不过,当我在我的 C# 服务器端语言中使用 Json.Encode 时,它会自动将日期转换为毫秒时间戳。我很高兴它做到了,因为虽然它没有在查询中转换,但至少它仍然转换为服务器-一边。
    猜你喜欢
    • 1970-01-01
    • 2016-11-26
    • 2011-12-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-02-25
    • 1970-01-01
    相关资源
    最近更新 更多