【问题标题】:MS SQL version of TO_DATE queryTO_DATE 查询的 MS SQL 版本
【发布时间】:2020-05-14 02:15:51
【问题描述】:

我有一个查询要查看表的详细信息

select APPLICATION_NAME,
SOURCE,
IDENTITY_NAME,
IDENTITY_DISPLAY_NAME,
NATIVE_IDENTITY,
ACCOUNT_DISPLAY_NAME,
OPERATION,
STATUS,
CREATED, 
(TO_DATE('1970-01-01','YYYY-MM-DD') + created / 86400000) AS CREATED_DATE

看起来这个查询是针对 MySQL 的。但是,我们的数据库托管在 Microsoft SQL 中。因此,我在运行查询时遇到错误

'TO_DATE' 不是可识别的内置函数名称。

您能否在上面的查询中建议一个等效的 TO_DATE 命令以及如何修改它

【问题讨论】:

  • 你想做什么?你也不需要在 MySQL 中做任何这样的事情——两个数据库都有日期类型。您还必须修复 MySQL 数据库,一旦人们意识到这会使他们容易受到 Y2K38 问题的影响。
  • 只需将created 更改为适当的日期类型,例如datetime2,它允许您指定小数秒精度,并且实际上比bigint 占用更少 空间以获得毫秒精度。或者如果您不想要时间组件,请使用date
  • SQL Server 具有 CASTCONVERT 函数,用于将文本日期转换为日期类型,反之亦然。但是,正如建议的那样,最好使用日期类型。
  • CAST(DATE, '1970-01-01', 23)
  • 再说一次,你想做什么?created 包含什么?您不需要这样做,您可以使用DATEADD 将秒或毫秒添加到基准日期。

标签: mysql sql-server tsql date


【解决方案1】:

看起来created 是一个纪元时间戳,以毫秒为单位存储(86400000 是一天中有多少毫秒)。如果是这样,我认为你想要:

DATEADD(ms, created, '1970-01-01') AS CREATED_DATE

旁注:TO_DATE() 是 Oracle 语法,而不是 MySQL。在原始查询中要更改的最重要的事情是日期算术:Oracle 允许将日期添加到 date,而大多数其他数据库则不允许。另一方面,SQL Server 不支持标准区间算法(我们需要使用DATEADD())。

【讨论】:

  • OP 想要将其转换为 T-SQL。看起来created 存储了一个 Unix 纪元,而不是一个正确的与日期时间相关的值
  • @PanagiotisKanavos:现已修复。
  • 应该是ms,因为 OP 除以 86400000,而不是 86400。不过我们不能确定,因为还没有样本数据
  • 为什么这个答案被否决(连同这里的所有其他答案)?否决者,请详细说明。
【解决方案2】:

您可以使用 DATEADD 添加到日期时间并使用 CONVERT 将您的字符串设置为 Datetime 类型:

--Using the DateAdd to add parts to the date and Tehe CONVERT to set your string to a datetime
    SELECT DATEADD(MS, 10, CONVERT(DATETIME, '1970-01-01')) -- Add 10 Milliseconds
    SELECT DATEADD(S, 10, CONVERT(DATETIME, '1970-01-01')) -- Add 10 Seconds
    SELECT DATEADD(N, 10, CONVERT(DATETIME, '1970-01-01')) -- Add 10 Minutes
    SELECT DATEADD(HH, 10, CONVERT(DATETIME, '1970-01-01')) -- Add 10 Hours
    SELECT DATEADD(D, 10, CONVERT(DATETIME, '1970-01-01')) -- Add 10 Days

【讨论】:

    猜你喜欢
    • 2020-09-02
    • 1970-01-01
    • 2014-11-08
    • 1970-01-01
    • 1970-01-01
    • 2021-12-01
    • 2014-06-14
    • 1970-01-01
    • 2014-03-09
    相关资源
    最近更新 更多