当前位置:Gxlcms > 数据库问题 > sql server 中将由逗号“,”分割的一个字符串,转换为一个表,并应用与 in 条件

sql server 中将由逗号“,”分割的一个字符串,转换为一个表,并应用与 in 条件

时间:2021-07-01 10:21:17 帮助过:2人阅读

"1,2,3"; string sqltxt="select * from tablename where id in ("+aa+")";

可以把形如“1,2,3”这样的字符串转换为一个临时表,这个表有一列,3行,每一行存一个项目(用逗号分隔开的一部分)

该函数可以这样写:

  1. <span style="color: #0000ff;">GO</span>
  2. <span style="color: #008080;">/*</span><span style="color: #008080;">***** Object: UserDefinedFunction [dbo].[StrToTable] Script Date: 2016/3/1 18:53:35 *****</span><span style="color: #008080;">*/</span>
  3. <span style="color: #0000ff;">SET</span> ANSI_NULLS <span style="color: #0000ff;">ON</span>
  4. <span style="color: #0000ff;">GO</span>
  5. <span style="color: #0000ff;">SET</span> QUOTED_IDENTIFIER <span style="color: #0000ff;">ON</span>
  6. <span style="color: #0000ff;">GO</span>
  7. <span style="color: #0000ff;">ALTER</span> <span style="color: #0000ff;">Function</span> <span style="color: #ff0000;">[</span><span style="color: #ff0000;">dbo</span><span style="color: #ff0000;">]</span>.<span style="color: #ff0000;">[</span><span style="color: #ff0000;">StrToTable</span><span style="color: #ff0000;">]</span>(<span style="color: #008000;">@str</span> <span style="color: #0000ff;">varchar</span>(<span style="color: #800000; font-weight: bold;">1000</span><span style="color: #000000;">))
  8. </span><span style="color: #0000ff;">Returns</span> <span style="color: #008000;">@tableName</span> <span style="color: #0000ff;">Table</span><span style="color: #000000;">
  9. (
  10. ID </span><span style="color: #0000ff;">varchar</span>(<span style="color: #800000; font-weight: bold;">50</span><span style="color: #000000;">)
  11. )
  12. </span><span style="color: #0000ff;">As</span>
  13. <span style="color: #008080;">--</span><span style="color: #008080;">该函数用于把一个用逗号分隔的多个数据字符串变成一个表的一列,例如字符串‘1,2,3,4,5‘ 将编程一个表,这个表</span>
  14. <span style="color: #0000ff;">Begin</span>
  15. <span style="color: #0000ff;">set</span> <span style="color: #008000;">@str</span> <span style="color: #808080;">=</span> <span style="color: #008000;">@str</span><span style="color: #808080;">+</span><span style="color: #ff0000;">‘</span><span style="color: #ff0000;">,</span><span style="color: #ff0000;">‘</span>
  16. <span style="color: #0000ff;">Declare</span> <span style="color: #008000;">@insertStr</span> <span style="color: #0000ff;">varchar</span>(<span style="color: #800000; font-weight: bold;">50</span>) <span style="color: #008080;">--</span><span style="color: #008080;">截取后的第一个字符串</span>
  17. <span style="color: #0000ff;">Declare</span> <span style="color: #008000;">@newstr</span> <span style="color: #0000ff;">varchar</span>(<span style="color: #800000; font-weight: bold;">1000</span>) <span style="color: #008080;">--</span><span style="color: #008080;">截取第一个字符串后剩余的字符串</span>
  18. <span style="color: #0000ff;">set</span> <span style="color: #008000;">@insertStr</span> <span style="color: #808080;">=</span> <span style="color: #808080;">left</span>(<span style="color: #008000;">@str</span>,<span style="color: #ff00ff;">charindex</span>(<span style="color: #ff0000;">‘</span><span style="color: #ff0000;">,</span><span style="color: #ff0000;">‘</span>,<span style="color: #008000;">@str</span>)<span style="color: #808080;">-</span><span style="color: #800000; font-weight: bold;">1</span><span style="color: #000000;">)
  19. </span><span style="color: #0000ff;">set</span> <span style="color: #008000;">@newstr</span> <span style="color: #808080;">=</span> <span style="color: #ff00ff;">stuff</span>(<span style="color: #008000;">@str</span>,<span style="color: #800000; font-weight: bold;">1</span>,<span style="color: #ff00ff;">charindex</span>(<span style="color: #ff0000;">‘</span><span style="color: #ff0000;">,</span><span style="color: #ff0000;">‘</span>,<span style="color: #008000;">@str</span>),<span style="color: #ff0000;">‘‘</span><span style="color: #000000;">)
  20. </span><span style="color: #0000ff;">Insert</span> <span style="color: #008000;">@tableName</span> <span style="color: #0000ff;">Values</span>(<span style="color: #008000;">@insertStr</span><span style="color: #000000;">)
  21. </span><span style="color: #0000ff;">while</span>(<span style="color: #ff00ff;">len</span>(<span style="color: #008000;">@newstr</span>)<span style="color: #808080;">></span><span style="color: #800000; font-weight: bold;">0</span><span style="color: #000000;">)
  22. </span><span style="color: #0000ff;">begin</span>
  23. <span style="color: #0000ff;">set</span> <span style="color: #008000;">@insertStr</span> <span style="color: #808080;">=</span> <span style="color: #808080;">left</span>(<span style="color: #008000;">@newstr</span>,<span style="color: #ff00ff;">charindex</span>(<span style="color: #ff0000;">‘</span><span style="color: #ff0000;">,</span><span style="color: #ff0000;">‘</span>,<span style="color: #008000;">@newstr</span>)<span style="color: #808080;">-</span><span style="color: #800000; font-weight: bold;">1</span><span style="color: #000000;">)
  24. </span><span style="color: #0000ff;">Insert</span> <span style="color: #008000;">@tableName</span> <span style="color: #0000ff;">Values</span>(<span style="color: #008000;">@insertStr</span><span style="color: #000000;">)
  25. </span><span style="color: #0000ff;">set</span> <span style="color: #008000;">@newstr</span> <span style="color: #808080;">=</span> <span style="color: #ff00ff;">stuff</span>(<span style="color: #008000;">@newstr</span>,<span style="color: #800000; font-weight: bold;">1</span>,<span style="color: #ff00ff;">charindex</span>(<span style="color: #ff0000;">‘</span><span style="color: #ff0000;">,</span><span style="color: #ff0000;">‘</span>,<span style="color: #008000;">@newstr</span>),<span style="color: #ff0000;">‘‘</span><span style="color: #000000;">)
  26. </span><span style="color: #0000ff;">end</span>
  27. <span style="color: #0000ff;">Return</span>
  28. <span style="color: #0000ff;">END</span>

然后sql语句就可以这样了

  1. <span style="color: #0000ff;">declare</span> <span style="color: #ff00ff;">str</span> vchar(<span style="color: #800000; font-weight: bold;">100</span><span style="color: #000000;">)
  2. </span><span style="color: #0000ff;">set</span> <span style="color: #ff00ff;">str</span><span style="color: #808080;">=</span><span style="color: #ff0000;">‘</span><span style="color: #ff0000;">1,2,3</span><span style="color: #ff0000;">‘</span>
  3. <span style="color: #0000ff;">select</span> <span style="color: #808080;">*</span> <span style="color: #0000ff;">from</span> tablename <span style="color: #0000ff;">where</span> id <span style="color: #808080;">in</span> (<span style="color: #0000ff;">select</span> ID <span style="color: #0000ff;">from</span> StrToTable(<span style="color: #008000;">@str</span>) )

 

sql server 中将由逗号“,”分割的一个字符串,转换为一个表,并应用与 in 条件

标签:

人气教程排行