在 Hive 中将科学计数法字符串转换为数字
Convert scientific notation string to number in Hive
我在 Cloudera 上有一个带有数字字符串列的脏 table。有些数字按原样采用 8 位数字形式,而另一些则采用科学记数法,例如91234567 对比 9.1234567E7。当数字以零结尾时,小数点更少,例如9.12E7 表示 91200000。如何将它们全部转换为 8 位表示形式?
我尝试了以下方法,但无济于事:
-- Remove 'E7' then convert the string to a decimal
,CASE WHEN m_number LIKE '%E7'
THEN CAST(REPLACE(m_number, 'E7', '') AS DECIMAL(10,7)) * POW(10, 7)
ELSE m_number END AS m_clean
Returns: AnalysisException: Incompatible return types 'DECIMAL(10,7)' and 'STRING' of exprs 'CAST(replace(m_number, 'E7', '') AS DECIMAL(10,7))' and 'm_number'.
简单的 cast
怎么样?
cast (9.12e7 as BIGINT)
OR
cast ('9.12E7' as decimal(8,0))
请检查哪个适合您。
截图如下。
我在 Cloudera 上有一个带有数字字符串列的脏 table。有些数字按原样采用 8 位数字形式,而另一些则采用科学记数法,例如91234567 对比 9.1234567E7。当数字以零结尾时,小数点更少,例如9.12E7 表示 91200000。如何将它们全部转换为 8 位表示形式?
我尝试了以下方法,但无济于事:
-- Remove 'E7' then convert the string to a decimal
,CASE WHEN m_number LIKE '%E7'
THEN CAST(REPLACE(m_number, 'E7', '') AS DECIMAL(10,7)) * POW(10, 7)
ELSE m_number END AS m_clean
Returns: AnalysisException: Incompatible return types 'DECIMAL(10,7)' and 'STRING' of exprs 'CAST(replace(m_number, 'E7', '') AS DECIMAL(10,7))' and 'm_number'.
简单的 cast
怎么样?
cast (9.12e7 as BIGINT)
OR
cast ('9.12E7' as decimal(8,0))
请检查哪个适合您。
截图如下。