首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Pervasive dval将日期存储为从01/01/0001开始以天为单位的整数。我需要一个函数来转换为sql server。

Pervasive dval将日期存储为从01/01/0001开始以天为单位的整数。我需要一个函数来转换为sql server。
EN

Stack Overflow用户
提问于 2017-02-24 00:33:29
回答 3查看 684关注 0票数 2

我需要帮助。普适数据库存储日期(以天为单位)。例如,719311是从1970年1月1日到5月28日的天数。因此,当查看719311时,1970年5月28是以普及表示的日期。

EN

回答 3

Stack Overflow用户

发布于 2017-02-24 00:47:58

代码语言:javascript
复制
select datediff(day,'0001-01-01','1753-01-01') + 2

select 719311 - 639907 -- sql 

select dateadd(day,79404,'1753-01-01') 

dateadd()函数不能使用早于'1753-01-01‘的日期,因此需要719311天减去639907天。不同之处在于,您可以插入dateadd()函数。

你应该得到这个1970-05-28 00:00:00.000

票数 0
EN

Stack Overflow用户

发布于 2017-02-24 01:26:13

为此,您可以使用SQL Servers的dateadd功能。但是,Pervasive中的值太大,无法添加到基准日期0 (1900-01-01)中。

为了解决这个问题,我使用了提供的已知整数/日期,并计算了0001-01-01和1900-01-01之间的增量为693597。该值是静态的,可以从每个普及值中减去该值并在dateadd中使用。然后可以将结果添加到1900-01-01。

代码语言:javascript
复制
-- GET BASE DATE OF 0
SELECT CONVERT(DATETIME,0)

-- CALCULATE DIFF FROM 0 TO A KNOWN DATE...
SELECT DATEDIFF(DD,0,'1970-05-28')

--SUBTRACT ABOVE DIFF FROM KNOWN INTEGER FOR SAID DATE... THIS IS OUR DELTA
SELECT 719311-25714

-- ADD THE INTEGER OF SAID DATE, MINUS THE ABOVE DELTA TO 0 TO CONFIRM WE GET THE KNOWN DATE.
SELECT DATEADD(DD,719311-693597,0)

-- USING VARIABLES, LEAVE @DELTA AS A STATIC VALUE, JUST UPDATE @PERVASIVE
DECLARE @PERVASIVE INT, @DELTA INT
SET @PERVASIVE=719312

SET @DELTA=693597
SELECT DATEADD(DD,@PERVASIVE-@DELTA,0)
票数 0
EN

Stack Overflow用户

发布于 2017-02-24 01:42:21

另一种选择是将days添加到date数据类型。

当我将719311天数添加到'0001-01-01'时,我让'1970-05-30'获取'1970-05-28',我必须删除其中的2天。

代码语言:javascript
复制
select dateadd(day,719311-2,convert(date,'00010101'))

返回'1970-05-28'

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/42421354

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档