Sql Server



一、拼接多个字段的值
select Convert(nvarchar(50),id)+’-’+name+’-’+sex as montage from test
二、一个字段多条记录的拼接
select stuff((select ‘-’+name from test for xml path (’’)),1,1,’’) as montage
①stuff:
1、作用
stuff(param1, startIndex, length, param2)
将param1中自startIndex(SQL中都是从1开始,而非0)起,删除length个字符,然后用param2替换删掉的字符。
2、参数
param1
一个字符数据表达式。param1可以是常量、变量,也可以是字符列或二进制数据列。
startIndex
一个整数值,指定删除和插入的开始位置。如果 startIndex或 length 为负,则返回空字符串。如果startIndex比param1长,则返回空字符串。startIndex可以是 bigint 类型。
length
一个整数,指定要删除的字符数。如果 length 比param1长,则最多删除到param1 中的最后一个字符。length 可以是 bigint 类型。
3、返回类型
如果param1是受支持的字符数据类型,则返回字符数据。如果param1是一个受支持的 binary 数据类型,则返回二进制数据。
4、备注
如果结果值大于返回类型支持的最大值,则产生错误。
②for xml path:
for xml path有的人可能知道有的人可能不知道,其实它就是将查询结果集以XML形式展现,有了它我们可以简化我们的查询语句实现一些以前可能需要借助函数活存储过程来完成的工作。



MySql



在Mysql 数据库中存在两种字符串连接操作.具体操作如下
一. 语法

    1. CONCAT(string1,string2,…) 说明 : string1,string2代表字符串,concat函数在连接字符串的时候,只要其中一个是NULL,那么将返回NULL
    2. CONCAT_WS(separator,str1,str2,…)
     说明 : string1,string2代表字符串,concat_ws 代表 concat with separator,第一个参数是其它参数的分隔符。分隔符的位置放在要连接的两个字符串之间。分隔符可以是一个字符串,也可以是其它参数。如果分隔符为 NULL,则结果为 NULL。函数会忽略任何分隔符参数后的 NULL 值。
     举例1:
     mysql> select concat_ws(’#’,‘dbdh=’,‘NorthEastTrcoon’,null) AS dbdh_name_three;
     ±----------------------+
     | dbdh_name_three |
     ±----------------------+
     | dbdh=#NorthEastTrcoon |
     ±----------------------+
     1 row in set (0.00 sec)
     例2:
     mysql> select concat_ws(null,‘dbdh=’,‘NorthEastTrcoon’,null) AS dbdh_name_fourth
     ;
     ±-----------------+
     | dbdh_name_fourth |
     ±-----------------+
     | NULL |
     ±-----------------+
     1 row in set (0.00 sec)
     例3
     mysql> select concat_ws(’*’,‘dbdh=’,‘NorthEastTrcoon’,null) AS dbdh_name_fifth;
     ±----------------------+
     | dbdh_name_fifth |
     ±----------------------+
     | dbdh=*NorthEastTrcoon |
     ±----------------------+
     1 row in set (0.00 sec)3. MySQL中group_concat函数
     完整的语法如下:
     group_concat([DISTINCT] 要连接的字段 [Order BY ASC/DESC 排序字段] [Separator ‘分隔符’])
     基本查询
     mysql> select * from stu1;
     ±-----±-----+
     | id| name |
     ±-----±-----+
     |1 | 10|
     |1 | 20|
     |1 | 20|
     |2 | 20|
     |3 | 200 |
     |3 | 500 |
     ±-----±-----+
     6 rows in set (0.00 sec)
     以id分组,把name字段的值打印在一行,逗号分隔(默认)mysql> select id,group_concat(name) from aa group by id;
     ±-----±-------------------+
     | id| group_concat(name) |
     ±-----±-------------------+
     |1 | 10,20,20|
     |2 | 20 |
     |3 | 200,500|
     ±-----±-------------------+
     3 rows in set (0.00 sec)
     以id分组,把name字段的值打印在一行,分号分隔
     mysql> select id,group_concat(name separator ‘;’) from aa group by id;
     ±-----±---------------------------------+
     | id| group_concat(name separator ‘;’) |
     ±-----±---------------------------------+
     |1 | 10;20;20 |
     |2 | 20|
     |3 | 200;500 |
     ±-----±---------------------------------+
     3 rows in set (0.00 sec)
     以id分组,把去冗余的name字段的值打印在一行,
     逗号分隔
     mysql> select id,group_concat(distinct name) from aa group by id;
     ±-----±----------------------------+
     | id| group_concat(distinct name) |
     ±-----±----------------------------+
     |1 | 10,20|
     |2 | 20 |
     |3 | 200,500 |
     ±-----±----------------------------+
     3 rows in set (0.00 sec)以id分组,把name字段的值打印在一行,逗号分隔,以name排倒序
    mysql> select id,group_concat(name order by name desc) from aa group by id;
     ±-----±--------------------------------------+
     | id| group_concat(name order by name desc) |
     ±-----±--------------------------------------+
     |1 | 20,20,10 |
     |2 | 20|
     |3 | 500,200|
     ±-----±--------------------------------------+
     3 rows in set (0.00 sec)
     还有一个简单的连接方式为: ||
     mysql> select * from student;
     ±—±-----±------±---------±-----------+
     | id | age | score | name | birth |
     ±—±-----±------±---------±-----------+
     | 1 | 23 | 78 | 李四 | 2017-10-10 |
     | 2 | 24 | 78 | zhangsan | 2017-10-10 |
     | 3 | 25 | 99 | 王五 | 2016-05-17 |
     ±—±-----±------±---------±-----------+
     3 rows in set (0.00 sec)mysql> select id+999,name,name+99,name+‘999’ from student;
     ±-------±---------±--------±-----------+
     | id+999 | name | name+99 | name+‘999’ |
     ±-------±---------±--------±-----------+
     | 1000 | 李四 | 99 | 999 |
     | 1001 | zhangsan | 99 | 999 |
     | 1002 | 王五 | 99 | 999 |
     ±-------±---------±--------±-----------+
     3 rows in set, 6 warnings (0.00 sec)