我尝试利用 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
非常感谢
这可能应该是 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,保留小数点后的尾随零。