Sql 将日期时间(YYYY-MM-DD HH:MM:SS)转换为十进制,以便openquery访问进度数据库

Sql 将日期时间(YYYY-MM-DD HH:MM:SS)转换为十进制,以便openquery访问进度数据库,sql,sql-server,datetime,openedge,progress-db,Sql,Sql Server,Datetime,Openedge,Progress Db,我正在尝试将当前日期转换为十进制数。我想得到一个十进制数的原因是将这个十进制数转换成一个数字。由于性能原因,我需要使用OPENQUERY执行此操作。链接数据库是一个进度数据库 该连接位于SQL数据库(SQL server 2008r2)和进度数据库(openedge)之间 当前情况: SELECT * FROM OPENQUERY([MylinkedServerName],'select * FROM [databasetable] WHERE ord_LastUpdateTime > (

我正在尝试将当前日期转换为十进制数。我想得到一个十进制数的原因是将这个十进制数转换成一个数字。由于性能原因,我需要使用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语句中的语法错误位于或关于
)如 日期时间)为十进制(18,8))+24150“(10713)”。
味精7321,第16级,状态2,第1行
准备查询时出错
“从[databasetable]中选择*,其中ord_LastUpdateTime> (转换(转换为十进制(18,8))+2415020.5)”
用于针对链接服务器的OLE DB提供程序“MSDASQL”执行 “[MylinkedServerName]”

我希望您有足够的信息来帮助我。

要开始,请使用您可以计算自朱利安纪元以来的“时间”:

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中使用它可能需要一些额外的引号修改。

(1)标记您正在使用的数据库。(2) 解释给定日期所需的数字。类似43940.59196的数字以及该数字的含义是什么?如果将正常数据时间转换为十进制,这就是结果。您知道Sql Server 2008 R2已经过时了,对吗?这意味着它不再得到任何更新。。。甚至连关键的安全补丁都没有!继续使用它是危险和不负责任的。升级到新版本应该是首要任务。我刚刚接受了它,但我不能投票支持它:(谢谢-投票支持将在你逗留足够长时间后生效;-)