concat_ws函数(concat函数排序)
mysql中字符串的拼接,能不能不使用concat函数
能使用。
MySQL concat函数可以连接一个或者多个字符串,如
select concat('10');
结果:10
select concat('11','22','33');
结果
112233
MySQL的concat函数在连接字符串的时候,只要其中一个是NULL,那么将返回NULL
select concat('11','22',null);
结果
NULL
mysql中concat_ws()函数
使用函数CONCAT_WS()。语法为:CONCAT_WS(separator,str1,str2,…)
CONCAT_WS() 代表 CONCAT With Separator ,是CONCAT()的特殊形式。第一个参数是其它参数的分隔符。分隔符放在要连接的两个字符串之间。分隔符可以是一个字符串,也可以是其它参数。如果分隔符为 NULL,则结果为 NULL。函数会忽略任何分隔符参数后的 NULL 值。但是CONCAT_WS()不会忽略任何空字符串。 (然而会忽略所有的 NULL)。
所以使用concat_ws()函数可以拼接多个字符串为一个字符串(当某个字段为空字符串或null值时也能获取正确结果)。
如有不当之处欢迎指正谢谢。
SQL---CONCAT系列函数
MYSQL里的CONCAT函数用于将两个字符串连接起来,形成一个单一的字符串。
如下面的例子:
mysql?select?concat('11','22','33');
+------------------------+
|?concat('11','22','33')?|
+------------------------+
|?112233?|
+------------------------+
1?row?in?set?(0.00?sec)
MySQL的concat函数在连接字符串的时候,只要其中一个是NULL,那么将返回NULL
mysql?select?concat('11','22',null);
+------------------------+
|?concat('11','22',null)?|
+------------------------+
|?NULL???|
+------------------------+
1?row?in?set?(0.00?sec)
MySQL中concat_ws函数
使用方法:
contcat_ws(separator,str1,str2,...)
contcat_ws()?代表?CONCAT?With?Separator?,是CONCAT()的特殊形式。第一个参数是其它参数的分隔符。分隔符的位置放在要连接的两个字符串之间。分隔符可以是一个字符串,也可以是其它参数。
注意:
如果分隔符为?NULL,则结果为?NULL。函数会忽略任何分隔符参数后的?NULL?值。
如连接后以逗号分隔
mysql?select?concat_ws(',','11','22','33');
+-------------------------------+
|?concat_ws(',','11','22','33')?|
+-------------------------------+
|?11,22,33?|
+-------------------------------+
1?row?in?set?(0.00?sec)
和MySQL中concat函数不同的是,?concat_ws函数在执行的时候,不会因为NULL值而返回NULL?
mysql?select?concat_ws(',','11','22',NULL);
+-------------------------------+
|?concat_ws(',','11','22',NULL)?|
+-------------------------------+
|?11,22?|
+-------------------------------+
1?row?in?set?(0.00?sec)
HQL里的CONCAT函数大致用法更SQL的相同
我使用的常用形式为:
select a, b, concat_ws(',' , collect_set(cast(c as string)))
from table group by a,b;
上文HQL中collect_set?有两个作用,第一个是 去重 ,去除group by后的重复元素,
第二个是形成一个 集合 ,将group by后属于同一组的第三列集合起来成为一个集合。与contact_ws
结合使用就是将这些元素以逗号分隔形成字符串。当使用collect_list是则不会去重,它会将第三列的集合全部都列出来
cast? ,用法cast(value as type),将某个列的值显示的转化为某个类型,cast(age as string ) 将int类型的数据转化为了String类型。
concat和concat_ws
一、CONCAT()函数【 不同字段之间的连接 】
CONCAT()函数用于将多个字符串连接成一个字符串。
用法:CONCAT(str1,str2,…)?
1)返回结果为连接参数产生的字符串。
2)可以有一个或多个参数。
3)如有任何一个参数为NULL ,则返回值为 NULL。
二、CONCAT_WS()函数【 不同字段之间的连接 】
CONCAT_WS()可自定义连接符
用法:CONCAT_WS(separator,str1,str2,…)
1)第一个参数是其它参数的分隔符。分隔符的位置放在要连接的两个字符串之间。
2)分隔符可以是一个字符串,也可以是其它参数。
3)如果分隔符为 NULL,则结果为 NULL。
4)函数会忽略任何分隔符参数后的 NULL 值。但是CONCAT_WS()不会忽略任何空字符串。 (然而会忽略所有的 NULL)。
三、GROUP_CONCAT()函数【 同一字段下各个值之间的连接 】
等价于CONCAT_WS(SEPARATOR?,collect_set(column)),但此时无法进行排序
hive - concat_ws 函数
? concat_ws 函数在连接字符串的时候,只要有一个字符串不是NULL,就不会返回NULL,concat_ws 函数需要指定分隔符。
hive select concat_ws('-','a','b');
a-b
hive select concat_ws('-','a','b',null);
a-b
hive select concat_ws('','a','b',null);
ab
MySQL中写存储过程用到连接字符串函数concat_ws()出错
简单的方法是你在存储过程中打印SQL,
set y_sql=concat_ws(' ','insert','into',tmp4data,'value','(',var1,var2,')');
select y_sql;
看看y_sql合并生什么, 其次在动态SQL过程中, 你定义的tmp4data到底是变量还是表的名称,如果是名称就需要添加分号