天天看点

sqlserver模仿mysql函数FIND_IN_SET,group_concat的功能

一、判断某个逗号隔开的字段中有某个值

FIND_IN_SET('a','a,b,c,d') 用 CHARINDEX(','+'b'+',' , ','+'a,b,c'+',') > 0 替代

二、模仿mysql的group_concat的示例

1

2

3

4

5

6

7

<code>SELECT</code> <code>id,     </code>

<code>       </code><code>val=( </code><code>SELECT</code> <code>[value] +</code><code>','</code>     

<code>               </code><code>FROM</code> <code>tb </code><code>AS</code> <code>b     </code>

<code>               </code><code>WHERE</code> <code>b.id = a.id</code>

<code>               </code><code>FOR</code> <code>XML PATH(</code><code>''</code><code>)  )     </code>

<code>FROM</code> <code>tb </code><code>AS</code> <code>a      </code>

<code>GROUP</code> <code>BY</code> <code>id</code>

<code>       </code><code>[val]=STUFF( (</code><code>SELECT</code> <code>','</code><code>+[value]     </code>

<code>                     </code><code>FROM</code> <code>tb </code><code>AS</code> <code>b     </code>

<code>                     </code><code>WHERE</code> <code>b.id = a.id     </code>

<code>                     </code><code>FOR</code> <code>XML PATH(</code><code>''</code><code>)) , 1 , 1 , </code><code>''</code> <code>)    </code>

8

9

10

11

12

13

14

15

16

<code>--删除、创建临时表</code>

<code>drop</code> <code>table</code> <code>#table1;</code>

<code>select</code> <code>* </code><code>into</code> <code>#table1</code>

<code>from</code> <code>(</code>

<code>SELECT</code> <code>myId,</code><code>'auto'</code> <code>as</code> <code>type</code>

<code>)allData</code>

<code>--把数据按myId分类链接,然后按链接后数据的长度倒序排序</code>

<code>select</code> <code>* </code><code>from</code> <code>(</code>

<code>  </code><code>select</code> <code>myId,</code>

<code>  </code><code>val=STUFF( (</code><code>SELECT</code> <code>'、'</code><code>+type     </code>

<code>                     </code><code>FROM</code> <code>#table1 </code><code>AS</code> <code>b     </code>

<code>                     </code><code>WHERE</code> <code>b.myId = ta.myId     </code>

<code>                     </code><code>FOR</code> <code>XML PATH(</code><code>''</code><code>)) , 1 , 1 , </code><code>''</code> <code>)</code>

<code>  </code><code>from</code> <code>#table1 ta</code>

<code>  </code><code>group</code> <code>by</code> <code>myId</code>

<code>) dd </code><code>order</code> <code>by</code> <code>LEN(val) </code><code>desc</code>

 本文转自 独孤环宇 51CTO博客,原文链接:http://blog.51cto.com/snowtiger/1929498

继续阅读