我遇到了处理负数值数据的情况。文件(存储在hdfs中)中某些数值的负号位置在右侧(如12345-),理想情况下,负数在左侧表示为负数(如-12345-)。我无法更改数据,因为此数据是正确的,并且当源系统(sap)使用此数据时,它能够将数据读取为负数。在配置单元中,我必须运行一些算术操作,例如我要对包含“12345-”之类数据的值求和,然后配置单元无法将此值识别为数字(列类型为decimal(10,2)),结果显示null为值!需要你的建议如何处理这种情况。提前谢谢。
vq8itlhq1#
检查最后一个字符,如果是“-”,则使用substr和concat构造正确的值:
select case when substr('12345-',-1,1)='-' then cast(concat('-',substr('12345-',1,length('12345-')-1)) as int) else cast('12345-' as int) end as column_name; OK -12345
用列名替换“12345-”
vsaztqbk2#
使用以下语法:
CAST(CAST(-1 AS DECIMAL(1,0)) AS DECIMAL(10,2))*CAST(regexp_replace(regexp_replace(TRIM(column name),'\\-',''),'-','') as decimal(10,2)),
2条答案
按热度按时间vq8itlhq1#
检查最后一个字符,如果是“-”,则使用substr和concat构造正确的值:
用列名替换“12345-”
vsaztqbk2#
使用以下语法: