文章目录
本文讲解一下hive数据库中字符串拼接的几种方式。
一、||字符串连接符
||
操作符
要求所有参与连接的操作数都是字符串类型。
实测后发现所有参与连接的字段必须有一个是字符串string类型,若所有的都非字符串类型,则会报错。
示例如下:
1.查询时拼接两个字段(ps: 需要保证两个字段都是字符串类型,否则可能会报错)
select name||class fromuser;select'Hello'||' World'-- || 连接多个字段select'Hello'||' World'||'你好'selectnull||'hello'-- hello 当空与字符串一起拼接时,返回字符串
1.1、常见报错
若
||
操作符两边全都非string类型,则会报错TProtocolException: Required field ‘type’ is unset
org.apache.thrift.protocol.TProtocolException:
Required field ‘type’ is unset! Struct:TPrimitiveTypeEntry(type:null,
typeQualifiers:TTypeQualifiers(qualifiers:{characterMaximumLength=}))
解决方法参见:《https://blog.csdn.net/weixin_49114503/article/details/142853037》
报错示例:
select1||1-- 因为两边都不是string类型,所以会报错select1.45||3-- 因为两边都不是string类型,所以会报错
正确示例:
select'hello'||' World'select'hello'||1.00-- ||操作符两边必须有一个是字符串类型
二、concat(str1,str2,str3,…)
concat(str1,str2,str3…): 连接参数的函数,返回结果为连接参数的字符串。如果有参数为NULL,则忽略该参数。
注意:传入参数不能全是非字符串类型,否则会报错
语法如下:
可以连接多个字符
concat(string:VARCHAR,string:VARCHAR*)
示例如下:
-- concat连接多个字段SELECT CONCAT('Hello',', ','World')FROM your_table;-- concat嵌套连接多个字段SELECT CONCAT(CONCAT('Hello',', '), CONCAT('World','!'))FROM your_table;-- 若有参数为null, 则忽略该参数,其他的进行拼接select concat('a',null,'c')--- ac -- concat函数中必须有一个是字符串类型,否则会报错。 所以尽量都传入字符串类型,虽然下列的方式不会报错select concat('1',2)--- 12-- 若所有的参数都是非字符串类型,则抛错select concat(1,2)--- 抛错Required field ‘type’ is unset!
三、concat_ws(‘分隔符’,str1,str2,…)
concat()的一个特殊形式,表示concat with separator,两个参数之间加上特定的分隔符。返回的是用指定分隔符连接参数的字符串。如果分割符为null,则返回null,参数为null,则忽略该参数。
注意:concat_ws所有参数必须都是字符串类型,不能有数字类型
示例如下:
select concat_ws('/','2018','12','19')----2018/12/19-- 若参数为null, 则忽略该参数select concat_ws(':','22','47',null)----22:47-- 若分隔符为null, 则返回nullselect concat_ws(null,'22','47')----null-- concat_ws的参数必须是string类型,否则会报错select concat_ws(':','22',47)----报错 [42000][10632] COMPILE FAILED:Semantic error:[Error 10632] Argument 3 of function CONCAT_WS must be 'string or array <string>', but 'int' was found.
版权归原作者 五月天的尾巴 所有, 如有侵权,请联系我们删除。