sql多种把查询结果转换成字符串方法

SQL中的叠加(小提示):有如下的需求,用SQL实现把结果集合转换为字符串.

  如下:

  可以有至少如下三种方法来做转换:

  1. 在.NET中通常的做法是先取出结果集放在DataTable中,再利用foreach循环取出每个字段串联起来. 亦如这样,在SQL中也有相同的做法,就是用游标(CURSOR)做循环,示例代码如下:

  

 代码如下 复制代码

Cursor

declare @mytable table(Col1 varchar(10))insert into @mytable values('AA'),('BB'),('CC')select SUBSTRING(@Colstring,2,LEN(@Colstring)-1) as Colstringdeclare mytype cursor local forselect Col1 from @mytableopen mytypefetch next from mytype into @Col1while @@FETCH_STATUS=0beginset @Colstring+=','+@Col1fetch next from mytype into @Col1enddeallocate mytypedeclare @Colstring varchar(50)=''declare @Col1 varchar(10)

 

  转换之后的字符串:

  CURSOR在SQL中的效率很差,当数据量比较大时(>1 Million)会严重影响性能,不建议使用.

  2. SQL查询中直接赋值,这种方式CODE比较简捷.

  代码

 代码如下 复制代码
declare @mytable table (Col1 varchar(10))insert into @mytable values ('AA'),('BB'),('CC') declare @Colstring varchar(50)select @Colstring = isnull(@Colstring + ',' , '' ) + isnull( Col1 , '' )from @mytable select @Colstring as Colstring

 

  运行结果:

  3. FOR XML PATH

  首先转换为XML的数据库类型.

 代码如下 复制代码
declare @mytable table (Col1 varchar(10))insert into @mytable values ('AA'),('BB'),('CC')SELECT ','+Col1 --No alias FROM @mytable ORDER BY Col1 FOR XML PATH('TYPE')

 

  可以看到输入结果是XML类型的,TYPE为节点

<TYPE>,AA</TYPE><TYPE>,BB</TYPE><TYPE>,CC</TYPE>

       假如没有TYPE节点,就会接近想要的结果,修改CODE如下:

  代码

 代码如下 复制代码
declare @mytable table (Col1 varchar(10))insert into @mytable values ('AA'),('BB'),('CC')SELECT ','+Col1 --No alias FROM @mytable ORDER BY Col1 FOR XML PATH('')

 

  

        太好了,只需要把前置逗号(,)取消就OK了,接续修改CODE:

 代码如下 复制代码

  FOR XML PATH

declare @mytable table (Col1 varchar(10))insert into @mytable values ('AA'),('BB'),('CC')select STUFF((SELECT ','+Col1 --No alias FROM @mytable ORDER BY Col1 FOR XML PATH('')) ,1,1,space(0)) as Colstring

 

  得到需求的结果:

  扩展如下:

  代码

 代码如下 复制代码
declare @mytable table ( id int, potype varchar(10))insert into @mytable values (1,'A>A')insert into @mytable values (1,'B&B')insert into @mytable values (1,'C

 

  代码

 代码如下 复制代码
DECLARE @mytable TABLE ( id INTEGERNOTNULL, potype VARCHAR(10) NOTNULL );INSERT @mytable VALUES (1,'A>A');INSERT @mytable VALUES (1,'B&B');INSERT @mytable VALUES (1,'C

     推荐采用第二种,或是第三种方法.

时间: 2024-10-23 10:04:51

sql多种把查询结果转换成字符串方法的相关文章

C#字节数组转换成字符串浅析

C#语言还是比较常见的东西,这里我们主要介绍C#字节数组转换成字符串,包括介绍字符串转换到字节数组等方面. C#字节数组转换成字符串 如果还想从 System.String 类中找到方法进行字符串和字节数组之间的转换,恐怕你会失望了.为了进行这样的转换,我们不得不借助另一个类:System.Text.Encoding.该类提供了 bye[] GetBytes(string) 方法将字符串转换成字节数组,还提供了 string GetString(byte[]) 方法将C#字节数组转换成字符串.

JavaScript通过Date-Mask将日期转换成字符串的方法

  本文实例讲述了JavaScript通过Date-Mask将日期转换成字符串的方法.分享给大家供大家参考.具体实现方法如下: ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 6

js字符串转换成数字与数字转换成字符串的实现方法

 本篇文章主要是对js字符串转换成数字与数字转换成字符串的实现方法进行了详细的介绍,需要的朋友可以过来参考下,希望对大家有所帮助 js字符串转换成数字   将字符串转换成数字,得用到parseInt函数. parseInt(string) : 函数从string的开始解析,返回一个整数.     举例: parseInt('123') : 返回 123(int): parseInt('1234xxx') : 返回 1234(int):   如果解析不到数字,则将返回一个NaN的值,可以用isNa

using-如何判断一个数是几位数?不转换成字符串也不循环还有其它做法么?

问题描述 如何判断一个数是几位数?不转换成字符串也不循环还有其它做法么? 这是我的程序,请大侠看看 #include <iostream>using namespace std;int jiweishu(int n);int main(){ int a; cin >> a; cout << jiweishu(a);}int jiweishu(int n){ int ws = 0; while (n > 0) { n /= 10; ws++; } return ws

net-C++ 字节码转换成字符串怎么做呢?求大神!

问题描述 C++ 字节码转换成字符串怎么做呢?求大神! 请问字节码:E4 BD A0 E5 A5 BD E5 91 80 00 72 69 6E 67 3A 20 64 69 73 61 62 6C 65 64 怎么样转换成:"你好呀"这个字符串 类似于.net 中的System.Text.Encoding.GetEncoding()方法. 在.net C#中可以转换! 解决方案 wchar_t temp[100];wchar_t src[100];strncpy(src (LPCTS

java怎么把转换成字符串转换成中国人习惯看的时间。

问题描述 java怎么把转换成字符串转换成中国人习惯看的时间. 如下代码 public class Test{ public static void main(String[] args) throws Exception { String str="2015/4/13"; Date d=new SimpleDateFormat("yyyy/MM/dd").parse(str); System.out.println(d);} } 打印出来的结果是 Mon Apr

link将字节数组转换成字符串的写法

问题描述 link将字节数组转换成字符串的写法 link将字节数组转换成字符串的写法是什么? 解决方案 byte[] data = ... string result = string.Concat(data.Select(x => Convert.ToString("X2")));

VB6.0语言中关于布尔表达式转换成字符串的问题

问题描述 VB6.0语言中关于布尔表达式转换成字符串的问题 VB6.0语言数据库里存储的布尔表达式怎么以结果的形式拿到值,或者字符串转换为表达式的运算 解决方案 你可以用scripthost去执行你的表达式,得到结果

急急急急急急急急急急急急急急,sql server的程序如何转换成asp.net的程序?

问题描述 急急急急急急急急急急急急急急,sql server的程序如何转换成asp.net的程序? sql server的程序如何转换成asp.net的程序? sql server的程序如何转换成asp.net的程序? 解决方案 http://blog.csdn.net/xys_777/article/details/5703751 解决方案二: 是计算机专业的学生吗?如果是的话,就不会这么问这个问题了 解决方案三: 用C语言怎么写这个程序?f(x) = anxn +......+a2x2 +