我正在尝试将当前日期转换为十进制数字。我想要一个十进制数字的原因是将该十进制数字转换为儒略日期。由于性能原因,我需要使用OPENQUERY进行此操作。链接数据库是进度数据库。
连接是在SQL数据库(sql server 2008r2)和进度数据库(openedge)之间
当前情况:
SELECT * FROM OPENQUERY([MylinkedServerName],'select * FROM [databasetable] WHERE ord_LastUpdateTime > (CAST(CAST(GETUTCDATE() as datetime) as decimal(18,8) + 2415020.5)
这是错误:
链接服务器“ [MylinkedServerName]”的OLE DB提供程序“ MSDASQL”返回消息“ [DataDirect] [ODBC Progress OpenEdge Wire协议司机] [OPENEDGE]SQL语句中的语法错误大约为“)为datetime),如DECIMAL(18,8))+ 24150“(10713)”。Msg 7321,第16级,状态2,第1行准备查询时发生错误“ SELECT * FROM [databasetable]在哪里ord_LastUpdateTime>(CAST(CAST(GETUTCDATE()as datetime)AS DECIMAL(18,8))+ 2415020.5)”用于针对链接服务器的OLE DB提供程序“ MSDASQL”执行“ [[MylinkedServerName]”。
我希望您有足够的信息来帮助我。
[开始使用timestampdiff,您可以计算朱利安时代以来的“时间”:
timestampdiff( sql_tsi_second, { d '01/01/-4713' }, now() ) / 86400
由于差异的单位是sql_tsi_second,因此需要将结果除以24小时* 60分钟* 60秒= 86400秒。如果您想进行更精确的计算,可以使用:
timestampdiff( sql_tsi_frac_second, { d'01/01/-4713' }, now() ) / 86400000
唯一剩下的问题是我不认为now()是UTC-因此您需要校正UTC与您所在时区之间的小时数。
以上已使用JDBC进行过测试,这意味着在OPENQUERY中使用它可能需要一些额外的引号摆弄。