Mysql 最新查询的MS SQL版本
我有一个查询来查看表的详细信息Mysql 最新查询的MS SQL版本,mysql,sql-server,tsql,date,Mysql,Sql Server,Tsql,Date,我有一个查询来查看表的详细信息 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的。但是,
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命令,以及如何在上面的查询中修改它它看起来像是
创建的
是一个历元时间戳,以毫秒为单位存储(86400000是一天中有多少毫秒)。如果是这样,我认为您希望:
DATEADD(ms, created, '1970-01-01') AS CREATED_DATE
旁注:
TO_DATE()
是Oracle语法,而不是MySQL。原始查询中最重要的更改是日期算法:Oracle允许向日期添加天数,而大多数其他数据库不允许。另一方面,SQL Server不支持标准的间隔算法(我们需要使用DATEADD()
)。您可以使用DATEADD添加到datetime并转换为将字符串设置为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
你想干什么?您也不需要在MySQL中执行任何此类操作-这两个数据库都有日期类型。一旦人们意识到这使他们能够解决Y2K38问题,你也必须修复MySQL数据库。只需将created
更改为适当的日期类型,例如允许你指定分数秒精度,实际上比毫秒精度的bigint占用更少的空间。或者,如果您不希望时间组件SQL Server具有用于将文本日期转换为日期类型的CAST
和CONVERT
函数,也可以使用这些函数。但是,正如有人建议的那样,最好使用日期类型。CAST(日期,'1970-01-01',23)
再说一遍,你想做什么??创建的包含哪些内容?你不需要这样做,你只需要使用DATEADD
将秒或毫秒添加到一个基准日期。OP希望将其转换为t-SQL。看起来created
存储的是Unix纪元,而不是与日期时间相关的适当纪元value@PanagiotisKanavos:现在已修复。它可能应该是ms
,因为OP除以86400000,而不是86400。但是我们不能确定,因为没有样本数据,为什么这个答案被否决了(和这里的所有其他答案一样)?请详细说明。