对于这个问题,有很多人想到了,在程序上,有方法以及处理了,xxx.Split('***') 即可得到一个数组集合,但是假如直接放入SQL中该如何处理呢?
.NET Compact Framework中是这样定义xxx.Split('***')方法的:
同时,他也还有其他参数的同名方法:
下边是我查阅找到的一个理论方法(可作为参考):
public static string[] split(string strinput, string sp){string tmp = "";int strlen = 0, splen = 0;int found = 0;string[] rt = null;try{if (strinput == null || sp == null || strinput.Length == 0 || sp.Length == 0){return null; //初始化一个数组列表(当做动态数组)} ArrayList tmp3 = new ArrayList();strlen = strinput.Length;splen = sp.Length;for (int i = 0; i < strlen; i++){ //查找分隔符found = strinput.IndexOf(sp, i);if (found >= 0){tmp = ""; //取分隔符前的字符串tmp = strinput.Substring(i, found - i); //添加到数组列表tmp3.Add(tmp);i = found + splen - 1;}else{string tmp2 = ""; //取最后的字符串tmp2 = strinput.Substring(i);if (tmp2 != "")tmp3.Add(tmp2);break;}} //将动态数组的维数设置成实际存在的元素个数,因为数组列表是以16的倍数递增维数的tmp3.TrimToSize(); //转换数组列表为字符串数组,并返回。rt = (string[])tmp3.ToArray(typeof(String));tmp3.Clear();}catch (Exception e){Console.WriteLine("{0}", e.Message);throw e;}return rt;}
接下来就是转化为SQL:
--ALTER CREATE
--拆分字符串(表值函数)
CREATE FUNCTION [dbo].[SplitStringType](@str nvarchar(max),@spliter nvarchar(10))
RETURNS @tb table(ResultsTable nvarchar(256))
AS
BEGINDECLARE @Num int,@Pos int, @NextPos int ;SET @Num = 0 SET @Pos = 1 WHILE(@Pos <= LEN(@str)) BEGIN SELECT @NextPos = CHARINDEX(@spliter, @str, @Pos)IF (@NextPos = 0 OR @NextPos IS NULL) SELECT @NextPos = LEN(@str) + 1 INSERT INTO @tb VALUES(RTRIM(LTRIM(SUBSTRING(@str, @Pos, @NextPos - @Pos)))) SELECT @Pos = @NextPos+1 END return
ENDGO
从上边我们可以看到,其实对于结构来说,还是少不了两个条件,第一就是要被拆分的字符串(xxx),第二就是根据什么拆分(***)。所以也就有了两个参数,然后再进入SQL处理。
执行后,来看看效果吧
select * from dbo.[SplitStringType]('A|B|C|D|EF','|')
select * from dbo.[SplitStringType]('A,B,C,D,EF',',')
select * from dbo.[SplitStringType]('A,B,C|D,EF',',')
最后的结果是返回了一个表格,在这里我们可以把结果作为一个临时表处理,或者直接使用也行,根据不同的情况决定。
看到这里了,也许会有人说,这和存储过程有什么区别么?我使用存储过程传递两个参数不是也可以实现么?
我同样也这样想过,只是相对而言,把他作为函数跟好一点。
函数他具有更强的针对性,负责一小部分的一定逻辑即可(不排除有更复杂的存在)
存储过程他可以处理许多的问题,显得很笼统,庞大,并且在中大型项目中,存储过程的数量多了,你还得又去筛选找对应的存储过程
我是一个人三座城
一个人生活在三座城市,过去、现在、将来.
期待你的关注!
本文发布于:2024-02-02 00:33:48,感谢您对本站的认可!
本文链接:https://www.4u4v.net/it/170681065840235.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
留言与评论(共有 0 条评论) |