时间:2021-07-01 10:21:17 帮助过:3人阅读
- <span style="color: #008080;">--</span><span style="color: #008080;">字符串转表</span>
- <span style="color: #0000ff;">CREATE</span> <span style="color: #0000ff;">FUNCTION</span> Split(<span style="color: #008000;">@Text</span> <span style="color: #0000ff;">NVARCHAR</span>(<span style="color: #800000; font-weight: bold;">4000</span>),<span style="color: #008000;">@Sign</span> <span style="color: #0000ff;">NVARCHAR</span>(<span style="color: #800000; font-weight: bold;">4000</span><span style="color: #000000;">))
- </span><span style="color: #0000ff;">RETURNS</span> <span style="color: #008000;">@tempTable</span> <span style="color: #0000ff;">TABLE</span>(id <span style="color: #0000ff;">INT</span> <span style="color: #ff00ff;">IDENTITY</span>(<span style="color: #800000; font-weight: bold;">1</span>,<span style="color: #800000; font-weight: bold;">1</span>) <span style="color: #0000ff;">PRIMARY</span> <span style="color: #0000ff;">KEY</span>,<span style="color: #ff0000;">[</span><span style="color: #ff0000;">VALUE</span><span style="color: #ff0000;">]</span> <span style="color: #0000ff;">NVARCHAR</span>(<span style="color: #800000; font-weight: bold;">4000</span><span style="color: #000000;">))
- </span><span style="color: #0000ff;">AS</span>
- <span style="color: #0000ff;">BEGIN</span>
- <span style="color: #0000ff;">DECLARE</span> <span style="color: #008000;">@StartIndex</span> <span style="color: #0000ff;">INT</span> <span style="color: #008080;">--</span><span style="color: #008080;">开始查找的位置 </span>
- <span style="color: #0000ff;">DECLARE</span> <span style="color: #008000;">@FindIndex</span> <span style="color: #0000ff;">INT</span> <span style="color: #008080;">--</span><span style="color: #008080;">找到的位置 </span>
- <span style="color: #0000ff;">DECLARE</span> <span style="color: #008000;">@Content</span> <span style="color: #0000ff;">VARCHAR</span>(<span style="color: #800000; font-weight: bold;">4000</span>) <span style="color: #008080;">--</span><span style="color: #008080;">找到的值 </span>
- <span style="color: #008080;">--</span><span style="color: #008080;">初始化一些变量 </span>
- <span style="color: #0000ff;">SET</span> <span style="color: #008000;">@StartIndex</span> <span style="color: #808080;">=</span> <span style="color: #800000; font-weight: bold;">1</span> <span style="color: #008080;">--</span><span style="color: #008080;">T-SQL中字符串的查找位置是从1开始的 </span>
- <span style="color: #0000ff;">SET</span> <span style="color: #008000;">@FindIndex</span><span style="color: #808080;">=</span><span style="color: #800000; font-weight: bold;">0</span>
- <span style="color: #008080;">--</span><span style="color: #008080;">开始循环查找字符串逗号 </span>
- <span style="color: #0000ff;">WHILE</span>(<span style="color: #008000;">@StartIndex</span> <span style="color: #808080;"><=</span> <span style="color: #ff00ff;">LEN</span>(<span style="color: #008000;">@Text</span><span style="color: #000000;">))
- </span><span style="color: #0000ff;">BEGIN</span>
- <span style="color: #008080;">--</span><span style="color: #008080;">查找字符串函数 CHARINDEX 第一个参数是要找的字符串 </span>
- <span style="color: #008080;">--</span><span style="color: #008080;"> 第二个参数是在哪里查找这个字符串 </span>
- <span style="color: #008080;">--</span><span style="color: #008080;"> 第三个参数是开始查找的位置 </span>
- <span style="color: #008080;">--</span><span style="color: #008080;">返回值是找到字符串的位置 </span>
- <span style="color: #0000ff;">SELECT</span> <span style="color: #008000;">@FindIndex</span> <span style="color: #808080;">=</span> <span style="color: #ff00ff;">CHARINDEX</span>(<span style="color: #008000;">@Sign</span>,<span style="color: #008000;">@Text</span>,<span style="color: #008000;">@StartIndex</span><span style="color: #000000;">)
- </span><span style="color: #008080;">--</span><span style="color: #008080;">判断有没找到 没找到返回0 </span>
- <span style="color: #0000ff;">IF</span>(<span style="color: #008000;">@FindIndex</span> <span style="color: #808080;">=</span><span style="color: #800000; font-weight: bold;">0</span> <span style="color: #808080;">OR</span> <span style="color: #008000;">@FindIndex</span> <span style="color: #0000ff;">IS</span> <span style="color: #0000ff;">NULL</span><span style="color: #000000;">)
- </span><span style="color: #0000ff;">BEGIN</span>
- <span style="color: #008080;">--</span><span style="color: #008080;">如果没有找到者表示找完了 </span>
- <span style="color: #0000ff;">SET</span> <span style="color: #008000;">@FindIndex</span> <span style="color: #808080;">=</span> <span style="color: #ff00ff;">LEN</span>(<span style="color: #008000;">@Text</span>)<span style="color: #808080;">+</span><span style="color: #800000; font-weight: bold;">1</span>
- <span style="color: #0000ff;">END</span>
- <span style="color: #008080;">--</span><span style="color: #008080;">截取字符串函数 SUBSTRING 第一个参数是要截取的字符串 </span>
- <span style="color: #008080;">--</span><span style="color: #008080;"> 第二个参数是开始的位置 </span>
- <span style="color: #008080;">--</span><span style="color: #008080;"> 第三个参数是截取的长度 </span>
- <span style="color: #008080;">--</span><span style="color: #008080;">@FindIndex-@StartIndex 表示找的的位置-开始找的位置=要截取的长度 </span>
- <span style="color: #008080;">--</span><span style="color: #008080;">LTRIM 和 RTRIM 是去除字符串左边和右边的空格函数 </span>
- <span style="color: #0000ff;">SET</span> <span style="color: #008000;">@Content</span> <span style="color: #808080;">=</span> <span style="color: #ff00ff;">LTRIM</span>(<span style="color: #ff00ff;">RTRIM</span>(<span style="color: #ff00ff;">SUBSTRING</span>(<span style="color: #008000;">@Text</span>,<span style="color: #008000;">@StartIndex</span>,<span style="color: #008000;">@FindIndex</span><span style="color: #808080;">-</span><span style="color: #008000;">@StartIndex</span><span style="color: #000000;">)))
- </span><span style="color: #008080;">--</span><span style="color: #008080;">初始化下次查找的位置 </span>
- <span style="color: #0000ff;">SET</span> <span style="color: #008000;">@StartIndex</span> <span style="color: #808080;">=</span> <span style="color: #008000;">@FindIndex</span><span style="color: #808080;">+</span><span style="color: #800000; font-weight: bold;">1</span>
- <span style="color: #008080;">--</span><span style="color: #008080;">把找的的值插入到要返回的Table类型中 </span>
- <span style="color: #0000ff;">INSERT</span> <span style="color: #0000ff;">INTO</span> <span style="color: #008000;">@tempTable</span> (<span style="color: #ff0000;">[</span><span style="color: #ff0000;">VALUE</span><span style="color: #ff0000;">]</span>) <span style="color: #0000ff;">VALUES</span> (<span style="color: #008000;">@Content</span><span style="color: #000000;">)
- </span><span style="color: #0000ff;">END</span>
- <span style="color: #0000ff;">RETURN</span>
- <span style="color: #0000ff;">END</span>
- <span style="color: #0000ff;">SELECT</span> <span style="color: #808080;">*</span> <span style="color: #0000ff;">FROM</span> dbo.Split(<span style="color: #ff0000;">‘</span><span style="color: #ff0000;">a,b,c,d,e,f,g</span><span style="color: #ff0000;">‘</span>,<span style="color: #ff0000;">‘</span><span style="color: #ff0000;">,</span><span style="color: #ff0000;">‘</span>)
SQL 表 和字符串 互转
标签: