gpt4 book ai didi

sql - 在 Netezza 中将带分数转换为 float

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

我有一个字段,其中数字以 3 种格式存储为文本:

xx. (example: 31.)
xx.x (example: 31.2)
xx x/x (example: 31 2/7)

对于最终结果,我需要所有数字都采用十进制格式(即 xx.x)。

将前两种格式转换为小数相当简单,但我还没有完全弄清楚如何转换最后一种情况,因为简单的 CAST 函数不起作用。我已经使用 INSTR 函数来隔离这些数字的所有小数情况,但我不知道从那里去哪里。我查看了其他示例,但 Netezza 中不存在一些引用的函数(如 SUBSTRING_INDEX)。

最佳答案

我认为@Niederee 有蛮力解决方案,但我会使用 sql extensions toolkit .

create temporary table fractions (
val nvarchar(64)
) distribute on random;

insert into fractions values ('2.');
insert into fractions values ('2.3');
insert into fractions values ('31 2/7');
insert into fractions values('2 0/8');
insert into fractions values('516 56/537');

select
val
,case
when regexp_like(val,'^[\d\.]+$') then val::numeric(20,10) --Cast it if we can.
when regexp_like(val,'^[\d\.\s\/]+$')
then regexp_extract(val,'\d+',1,1)::numeric(20,10) --Whole.
+ (
regexp_extract(val,'\d+',1,2)::numeric(20,10) --Numerator.
/ regexp_extract(val,'\d+',1,3)::numeric(20,10) --Denominator.
)
else null
end
from
fractions;

关于sql - 在 Netezza 中将带分数转换为 float ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32042741/

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