当前位置: 首页 > 知识库问答 >
问题:

赛贝斯ASE中的毫秒纪元转换

米俊晤
2023-03-14

我有一列毫秒格式的纪元。我需要将它们转换为另一列datetime,包括毫秒精度。

我已经尝试了(与铸造,转换等)的各种组合:

select dateadd(ss, 1610309854301, '19700101')         

我不断得到:

Arithmetic overflow during explicit conversion of BIGINT value '1610309854301'

在之前的帖子中有一些评论,但没有一篇是关于ASE的。

需要得到1610309854301:这等于另一列中的这个。2021年1月10日,星期日20:17:34.301

这可以在ASE 16.1的SQL中完成吗?

非常感谢。

共有2个答案

阴元青
2023-03-14

不完美但是...

dateadd(第二,(number_of_millis/1000),"01-01-1970")

e、 g.日期添加(第二次,(1610309854301/1000),“01-01-1970”)

如果使用秒,则会出现溢出错误。

或者如果作为选择的一部分使用

选择dateadd(秒,转换(INT,(my_milli_second_column/1000)),“01-01-1970”)

湛宝
2023-03-14

运行一些快速测试,它看起来(对我来说)像一些与日期相关的函数没有被更新到使用bigint数据类型(例如,dateadd()的留档只提到int值作为参数)。

假设您有一个支持合同,我建议使用SAP打开一个案例,看看这是否是一个已知的问题(以及在未来版本中是否计划/提供修复程序),或者是否有首选的解决方案。

一个简单的解决方法是将bigint值分成两个块<代码>/1000=

declare @ms     bigint,
        @newdt  datetime,         -- limited to 3 millisec precision
        @newdtb bigdatetime,      -- supports microsecs so not limited to mod(3 msec)
        @newdts varchar(30)       -- collect strings to convert into (big)datetime

select  @ms     = 1610309854301
select  @newdts = convert(varchar(30),dateadd(ss, @ms/1000, '19700101'),116) + '.' +
                  right('000'+convert(varchar(3),@ms % 1000),3 )
select  @newdt  = convert(datetime,@newdts)
select  @newdtb = convert(bigdatetime,@newdts)

select @newdts, convert(varchar(30),@newdt,139), convert(varchar(30),@newdtb,139)
go

这会产生:

 ------------------------------ ------------------------------ ------------------------------
 Jan 10 2021 20:17:34.301       Jan 10 2021 20:17:34.300000    Jan 10 2021 20:17:34.301000

笔记:

  • 第二个值(@newdt)显示了ASE对datetime数据类型的限制(即3毫秒精度)

 类似资料:
  • 我在赛贝斯ASE 15.5中使用赛贝斯Central工具创建了几个表。我已经将列定义为主键(int数据类型),不知何故,该列也变成了标识。 现在,从赛贝斯中心,我无法从该列中删除标识,即使该表或任何引用的表中没有数据。 有人能帮忙吗?我不想使用Set IDENTITY_INSERT,我想从本专栏中完全删除标识行为。 谢啦

  • 如何在Sybase ASE 15表格设置中删除列。 我尝试了一些,但没有用: 以及查看Sybase文档,它没有为我的问题提供解决方案。 数据库my_db未启用选择进入数据库选项。无法执行带有数据副本的ALTER TABLE。设置选择进入数据库选项并重新运行。

  • 全部的 这个标题几乎说明了一切。我在这里查看,但找不到任何有关模式的信息。 有人能帮我照个灯吗? 我知道MS SQL Server使用“schema.name”来引用数据库中的表,但对于Sybase我不确定。 蒂娅! 编辑: 我想我应该更具体一点。 我知道在MS SQL Server中可以修改表所有者,但您仍然可以通过“从sysobjects so、sysusers su、sys.tables t

  • 似乎 WITH 仅在 Sybase SQL Anywhere 中受支持:http://dcx.sybase.com/1100/en/dbusage_en11/commontblexpr-s-5414852.html …但不在Sybase ASE中:( 有人可以建议Sybase ASE中是否存在等效的构造吗?还有其他方法可以实现东西而不是使用 WITH,但我们计划重新调整一些动态生成的 SQL 的用

  • 我四处搜索,找到了一些有用的程序,例如: 但没人能帮我。我需要获得有关CPU、RAM、OS等的信息。有什么工具或程序可以帮助我吗?

  • Support for the Sybase database. The following table summarizes current support levels for database release versions. 数据库接口支持 The following dialect/DBAPI options are available. Please refer to individ