我打算将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的最大问题是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
是否有任何已定义的函数来关联日期和时间以获得创建/更新的真正意义?
谢谢
答案 0 :(得分:0)
如果您的列"UpdateDate","CreateDate"
以日期存储,列"UpdateTS","CreateTS"
以HHMMSS格式存储,则可以尝试以下操作:
TO_TIMESTAMP( COALESCE("UpdateDate","CreateDate",'1970-01-01') || ' ' || TO_TIME(COALESCE("UpdateTS","CreateTS",000000)) )
答案 1 :(得分:0)
“ UpdateDate”和“ CreateDate”作为日期存储在SAP HANA中,并保留年,月,日和00:00:00.000作为时间。
“ CreateTS”和“ UpdateTS”仅将时间以hhmmss格式存储为int。这意味着14:34:06存储为143406。作为整数,前导零不存储 。
对我有用的连接日期和时间的方法是为日期(格式YYYYMMDD)创建一个varchar,为时间添加前导零创建一个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