问题摘要:
在尝试转换为某个日期以便用户可以过滤数据时,HANA SQL或HANA Studio在视图(计算,属性或分析)中处理无效数据的正确方法是什么?
在SAP的表KONM中,字段KSTBM
是十进制数据类型(15,3)。此字段对或错,以YYYYMMDDHHM.MSS格式存储日期值。 (我是一个用户而不是系统的设计者。为什么有人在十进制字段中存储日期而不是日期/时间字段哦超出了这个问题的范围。)
如此有效的值,如:
存在且可以使用to_timestamp
或daydate
或类似功能轻松投射。
不幸的是,此表中的一些错误条目导致数据无法转换为日期时间,例如:
在此类无效记录上使用to_Timestamp
或daydate
函数时,会出现以下错误:
SAP DBTech JDBC:[2048]:列存储错误:搜索表错误:[6860]无效的日期,时间或时间戳值;
或
[303]:无效的DATE,TIME或TIMESTAMP值:
我同意这些是无效日期......因此我知道为什么会抛出错误。
虽然我想修复根本原因,然后纠正错误的数据;这不是一个选择。不同的团队,不同的资源不同的优先所以这是他们要做的事情列表,但我有需要WEBI报告的用户;由于存在不良数据......我仍然需要处理它。
我要做的是在HANA Studio中创建一个Calculated_view,它可以成功处理这些错误的日期。但我无法找到try catch或其他类型的异常处理,这将允许我基本上将这些日期设置为NULL,这样用户仍然可以获取其他相关数据,并且能够看到它们中有一些不良数据。可以纠正的系统。
由于抛出此错误,因此在运行WEBI报告时无法从Universe返回任何记录。我找到了一些选项,包括创建一个包含所有可能时间的日期/时间表....(我希望你能看到我不想这样做的原因)或创建一个函数(但它没有具体的指示;我毕竟是HANA和Universes以及WEBI的新用户,这就是问题存在的原因)
以下是可以在HANA Studio中运行的示例:
WITH MyExample as (SELECT 201701011.230 as KSTBM, 0 isBad from dummy union all
SELECT 201702301.000 as KSTBM, 1 isBad from dummy union all
SELECT 201702171.230 as KSTBM, 0 isBad from dummy union all
SELECT 201702192.400 as KSTBM, 1 isBad from dummy)
SELECT to_timestamp(To_DECIMAL(KSTBM*100000,15,0)) TS,
isBad
FROM MyExample A
WHERE isBad = 1
将isBad更改为0并且有效;将isBad更改为1,您会看到错误。
问题方面:
isdate()
在尝试投射之前检查有效...我只是没有在这里看到这些选项(但我是新的,也许根本无法使用非常好的帮助)感谢您阅读我冗长的问题。希望我已经提供了足够的细节。
我试图避免:
答案 0 :(得分:1)
您可能希望使用tstmp_is_valid()
功能:
WITH MyExample as (SELECT 201701011.230 as KSTBM, 0 isBad from dummy union all
SELECT 201702301.000 as KSTBM, 1 isBad from dummy union all
SELECT 201702171.230 as KSTBM, 0 isBad from dummy union all
SELECT 201702192.400 as KSTBM, 1 isBad from dummy)
SELECT KSTBM,
tstmp_is_valid(KSTBM*100000),
isBad
FROM MyExample A;
KSTBM TSTMP_IS_VALID(KSTBM*100000) ISBAD
201,701,011.23 1 0
201,702,301 0 1
201,702,171.23 1 0
201,702,192.4 0 1