Snowflake XML varchar 不删除尾随零

问题描述 投票:0回答:1

我尝试利用 GETXML 并将其输出转换为 VARCHAR,遇到各种类型的值,例如: 240.0、102.4、255.0 和文本数据,如 MOZILLA/5.0(WINDOWS;U;WINDOWS NT 6.0;PL;RV:1.8.1.14)GECKO/20080404 FIREFOX/2.0.0.14 WEBMONEY ADVISOR

例如,“240.0”的结果是“240”。如何保留小数点并得到“240.0”?我无法使用 NUMBER 类型,因为值也可以是 VARCHAR,并且小数点位数因数据类型而异。

我正在使用的 XML 结构示例是:

<DeviceInfo>
  <AdditionalInfo>
    <BrowserVersion>240.0</BrowserVersion>
  </AdditionalInfo>
</DeviceInfo>

在我的查询中:

    SELECT
      GET(XMLGET(xmldata, 'BrowserVersion'), '$')::VARCHAR AS BrowserVersion
    FROM CLAIM;

我除了得到 240.0 而不是 240

非常感谢

xml-parsing snowflake-cloud-data-platform
1个回答
0
投票

这可能应该是 Snowflake 解决数值格式问题的支持案例。它可能发生在解析期间,在转换为 varchar 之前,因此指定这一点并不重要。

作为解决方法,您可以获取包含标签的外部 XML,而不是获取值。这将保留格式。从那里,您可以使用正则表达式来去除 XML 标签。

create or replace table claim as select parse_xml(
'
<DeviceInfo>
  <AdditionalInfo>
    <BrowserVersion>240.0</BrowserVersion>
  </AdditionalInfo>
</DeviceInfo>
') as xmldata;


select regexp_replace(XMLGET(XMLGET(xmldata, 'AdditionalInfo'), 'BrowserVersion')::varchar, '<[^>]+>') as BROWSER_VERSION
from claim;

这将输出 240.0,保留小数点后的尾随零。

© www.soinside.com 2019 - 2024. All rights reserved.