gpt4 book ai didi

sql - SAP HANA SQL如何将CreateTS UpdateTS CreareTime UpdateTime转换为timestampdate

转载 作者:行者123 更新时间:2023-12-04 15:51:29 25 4
gpt4 key购买 nike

我想连接 CreateDate 和 CreateTS 来制作一个包含日期和时间的时间戳

现在我得到的唯一解决方案是这个

SELECT 
TO_TIMESTAMP(
to_char(COALESCE("UpdateDate","CreateDate",'1970-01-01'), 'yyyy-mm-dd') || ' '||
SUBSTRING (lpad(COALESCE("UpdateTS","CreateTS",0),6,'0'),0,2) || ':'||
SUBSTRING (lpad(COALESCE("UpdateTS","CreateTS",0),6,'0'),3,2)|| ':'||
SUBSTRING (lpad(COALESCE("UpdateTS","CreateTS",0),6,'0'),5,2), 'YYYY-MM-DD HH24:MI:SS'
) AS update_create
FROM OCRD

但我发现对于 UpdateTime 列,这段代码不起作用。最大的问题是 sap 将日期与时间分开,并以不同的格式保存时间,因此:

8 -> it's 00:08:00 and not 00:00:08
223 -> it's 22:30:00 andf bnot 00:02:23
16321 -> it's 01:63:21

是否有任何已定义的函数来连接日期和时间以获得创建/更新的真实时间戳?

谢谢

最佳答案

"UpdateDate"和 "CreateDate"在 SAP HANA 中存储为日期,保持年、月、日和 00:00:00.000 时间。

“CreateTS”和“UpdateTS”仅将时间以 hhmmss 格式存储为 int。这意味着 14:34:06 存储为 143406。作为 int,前导零不存储

对我有用的加入日期和时间的方法是为日期创建一个 varchar(格式 YYYYMMDD),为时间创建一个 varchar 添加前导零。然后,使用日期和时间创建时间戳。

解决方法:

TO_TIMESTAMP(TO_VARCHAR(COALESCE("UpdateDate","CreateDate",'19700101'), 'YYYYMMDD') || ' ' || LPAD(COALESCE("UpdateTS","CreateTS",0),6,0),'YYYYMMDD HH24MISS')

你可以创建一个函数来简化这个:

CREATE FUNCTION TO_DATETIME(vDATE DATE, vTime INT)
RETURNS DT TIMESTAMP
AS
BEGIN
DT := TO_TIMESTAMP(TO_VARCHAR(:vDATE, 'YYYYMMDD') || LPAD(:vTIME,6,'0'), 'YYYYMMDDHH24MISS');
END;

然后只需使用它:SELECT "UpdateDate", "UpdateTS", TO_DATETIME("UpdateDate", "UpdateTS") as "UpdateDateTime"FROM OCRD

编辑:有时 CreateTS 或 UpdateTS 存储为 HHMM 而不是 HHMMSS。请小心使用“00”填充或为这些情况创建新函数。

关于sql - SAP HANA SQL如何将CreateTS UpdateTS CreareTime UpdateTime转换为timestampdate,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53616555/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com