'00'XC 在 teradata 和 hive 中



我在teradata中发现了以下查询,并且运行时没有错误。

Trim(Both '00'XC FROM STG_101_104_BORM_NEW.NO_TRN) AS NO_TRN

Both '00'XC函数的用途是什么?当我在hive上运行它时,有一个错误,当我们把它翻译成hive时应该改变什么?

Trim(Both '00'XC FROM STG_101_104_BORM_NEW.NO_TRN)将在Teradata中工作,它从字符串中删除前导和尾部的空十六进制字符。'00'XC-为空字符。XC表示十六进制字符串字面值,00在十六进制中为空。
所以trim()试图删除它,但这将在teradata工作,而不是在hive。您需要了解该函数在teradata中的用途,然后在hive中实现相应的功能。
我在下面解释了trim()在hive和teradata中的不同。

trim(origstr)在hive中只是从字符串的左边和右边删除空格。Teradata中的
trim(both/leading/trailing patternstr from origstr))也从字符串中删除空格(和其他字符串),但它需要更多的参数。它更强大,因为它可以删除字节/十六进制字符等。Teradata-Trim例如,在hive-
SELECT TRIM(' aabccd ') FROM t2;-将生成aabccd

例如在teradata-
SELECT TRIM(BOTH FROM ' aabccd ') FROM t2;-将得到aabccd
SELECT TRIM(LEADING 'a' FROM 'aabccd') FROM t2;-将得到bccd

编辑:

select REGEXP_REPLACE(REGEXP_REPLACE('000ABCA000','0+$',''),"^0+(?!$)",'')

'0+$'-这将删除后面的0。
^0+(?!$)-这将删除前导0。

最新更新