为您推荐:
精华内容
最热下载
问答
  • 直接看SQL,各位大神看看如何把这个SQL转换成linq to EF 或者 linq to sqlSELECT risk_id , brand_name , edit_time , edit_user , risk_sort , merchant_id = STUFF(( SELECT ',' + CONVER...

    直接看SQL,各位大神看看如何把这个SQL转换成linq to EF 或者 linq to sql

    SELECT  risk_id ,
            brand_name ,
            edit_time ,
            edit_user ,
            risk_sort ,
            merchant_id = STUFF(( SELECT    ',' + CONVERT(VARCHAR(20), merch_id)
                                  FROM      tbRisk_Base_ProductMerch AS b
                                  WHERE     b.risk_id = t.risk_id
                                FOR
                                  XML PATH('')
                                ), 1, 1, '') ,
            key_str0 = STUFF(( SELECT   ',' + CONVERT(VARCHAR(20), key_str)
                               FROM     tbRisk_Base_Product_Key AS b
                               WHERE    b.risk_id = t.risk_id
                                        AND is_debar = 0
                             FOR
                               XML PATH('')
                             ), 1, 1, '') ,
            key_str1 = STUFF(( SELECT   ',' + CONVERT(VARCHAR(20), key_str)
                               FROM     tbRisk_Base_Product_Key AS b
                               WHERE    b.risk_id = t.risk_id
                                        AND is_debar = 1
                             FOR
                               XML PATH('')
                             ), 1, 1, '')
    FROM    tbRisk_Base_Product t; 
    这个里面有我长方形标记的这三个字段在tbRisk_Base_Product 中是没有这个三个字段的,但是查询出来的时候要出现这个三个字段和相应的内容是拼接的

    展开全文
    qq_37970738 2018-06-11 12:31:43
  • 一、统计单词在字符串中出现的次数 请注意,若要执行计数,请先调用Split方法来创建词数组。Split方法存在性能开销,如果对字符串执行的唯一操作是计数词,则应考虑改用Matches或 IndexOf方法。 cl...

        本笔记摘抄自:https://www.cnblogs.com/liqingwen/p/5814204.html,记录一下学习过程以备后续查用。

        一、统计单词在字符串中出现的次数

        请注意,若要执行计数,请先调用Split方法来创建词数组。Split方法存在性能开销,如果对字符串执行的唯一操作是计数词,则应考虑改用Matches或

    IndexOf方法。

        class Program
        {
            static void Main(string[] args)
            {
                #region LINQ 统计单词在字符串中出现的次数
                const string text = @"Historically, the world of data and the world of objects" +
                                    @" have not been well integrated. Programmers work in C# or Visual Basic" +
                                    @" and also in SQL or XQuery. On the one side are concepts such as classes," +
                                    @" objects, fields, inheritance, and .NET Framework APIs. On the other side" +
                                    @" are tables, columns, rows, nodes, and separate languages for dealing with" +
                                    @" them. Data types often require translation between the two worlds; there are" +
                                    @" different standard functions. Because the object world has no notion of query, a" +
                                    @" query can only be represented as a string without compile-time type checking or" +
                                    @" IntelliSense support in the IDE. Transferring data from SQL tables or XML trees to" +
                                    @" objects in memory is often tedious and error-prone.";
                const string searchWord = "data";
    
                //字符串转换成数组
                var source = text.Split(new[] { '.', '?', '!', ' ', ';', ':', ',' }, StringSplitOptions.RemoveEmptyEntries);
    
                //创建查询,并忽略大小写比较。
                var query = from word in source
                                 where string.Equals(word, searchWord, StringComparison.InvariantCultureIgnoreCase)
                                 select word;
    
                //统计匹配数量
                var wordCount = query.Count();
                Console.WriteLine($"{wordCount} occurrences(s) of the search word \"{searchWord}\" were found.");
                Console.Read();
                #endregion
            }
        }
    View Code

        运行结果如下:

        二、查询包含指定一组单词的句子

        此示例演示如何查找文本文件中包含指定一组单词中每个单词匹配项的句子。虽然在此示例中搜索条件数组是硬编码的,但也可以在运行时动态填充此

    数组。

        class Program
        {
            static void Main(string[] args)
            {
                #region LINQ 查询包含指定一组单词的句子
                const string text = @"Historically, the world of data and the world of objects " +
                                    @"have not been well integrated. Programmers work in C# or Visual Basic " +
                                    @"and also in SQL or XQuery. On the one side are concepts such as classes, " +
                                    @"objects, fields, inheritance, and .NET Framework APIs. On the other side " +
                                    @"are tables, columns, rows, nodes, and separate languages for dealing with " +
                                    @"them. Data types often require translation between the two worlds; there are " +
                                    @"different standard functions. Because the object world has no notion of query, a " +
                                    @"query can only be represented as a string without compile-time type checking or " +
                                    @"IntelliSense support in the IDE. Transferring data from SQL tables or XML trees to " +
                                    @"objects in memory is often tedious and error-prone.";
    
                //将文本块切割成数组
                var sentences = text.Split('.', '?', '!');
    
                //定义搜索条件,此列表可以在运行时动态添加。
                string[] wordsToMatch = { "Historically", "data", "integrated" };
    
                var query = from sentence in sentences
                            let t = sentence.Split(new char[] { '.', '?', '!', ' ', ';', ':', ',' }, StringSplitOptions.RemoveEmptyEntries)
                            where t.Distinct().Intersect(wordsToMatch).Count() == wordsToMatch.Length   //去重,取交集后的数量对比。
                            select sentence;
    
                foreach (var sentence in query)
                {
                    Console.WriteLine(sentence);
                }
                Console.Read();
                #endregion
            }
        }
    View Code

        运行结果如下:

        查询运行时首先将文本拆分成句子,然后将句子拆分成包含每个单词的字符串数组。对于每个这样的数组,Distinct<TSource> 方法移除所有重复的单词,

    然后查询对单词数组和wordstoMatch数组执行Intersect<TSource>操作。如果交集的计数与wordsToMatch数组的计数相同,则在单词中找到了所有的单词,

    然后返回原始句子。

        在对Split的调用中,使用标点符号作为分隔符,以从字符串中移除标点符号。如果您没有这样做,则假如您有一个字符串“Historically,”,该字符串不会

    与wordsToMatch数组中的“Historically”相匹配。根据源文本中标点的类型,您可能必须使用其他分隔符。

        三、在字符串中查询字符

        因为String类实现泛型IEnumerable<T>接口,所以可以将任何字符串作为字符序列进行查询。但是,这不是LINQ的常见用法。若要执行复杂的模式匹配操

    作,请使用Regex类。

        下面的示例查询一个字符串以确定它包含的数字的数目。

        class Program
        {
            static void Main(string[] args)
            {
                #region LINQ 在字符串中查询字符
                const string source = "ABCDE99F-J74-12-89A";
    
                //只选择数字的字符 
                var digits = from character in source
                             where char.IsDigit(character)
                             select character;
                Console.Write("Digit:");
                foreach (var digit in digits)
                {
                    Console.Write($"{digit} ");
                }
                Console.WriteLine();
    
                //选择第一个"-"之前的所有字符
                var query = source.TakeWhile(x => x != '-');
                foreach (var character in query)
                {
                    Console.Write(character);
                }
    
                Console.Read();
                #endregion
            }
        }
    View Code

        运行结果如下:

        四、正则表达式结合LINQ查询

        此示例演示如何使用Regex类创建正则表达式以便在文本字符串中进行更复杂的匹配。使用LINQ查询可以方便地对您要用正则表达式搜索的文件进行准确

    筛选以及对结果进行加工。

        class Program
        {
            static void Main(string[] args)
            {
                #region LINQ 正则表达式结合LINQ查询
                //请根据不同版本的VS进行路径修改
                const string floder = @"C:\Program Files (x86)\Microsoft Visual Studio\";
                var fileInfoes = GetFiles(floder);
                //创建正则表达式来寻找所有的"Visual"
                var searchTerm = new Regex(@"http://(www.w3.org|www.npmjs.org)");
    
                //搜索每一个“.html”文件
                //通过where找到匹配项
                //注意:select中的变量要求显示声明其类型,因为MatchCollection不是泛型IEnumerable集合。
                var query = from fileInfo in fileInfoes
                            where fileInfo.Extension == ".html"
                            let text = File.ReadAllText(fileInfo.FullName)
                            let matches = searchTerm.Matches(text)
                            where matches.Count > 0
                            select new
                            {
                                name = fileInfo.FullName,
                                matchValue = from Match match in matches select match.Value
                            };
    
                Console.WriteLine($"The term \"{searchTerm}\" was found in:");
                Console.WriteLine();
                foreach (var q in query)
                {
                    //修剪匹配找到的文件中的路径
                    Console.WriteLine($"name==>{q.name.Substring(floder.Length - 1)}");
                    //输出找到的匹配值
                    foreach (var v in q.matchValue)
                    {
                        Console.WriteLine($"matchValue==>{v}");
                    }
                    //输出空白行
                    Console.WriteLine();
                }
                Console.Read();
                #endregion
            }
    
            /// <summary>
            /// 获取指定路径的文件信息
            /// </summary>
            /// <param name="path"></param>
            /// <returns></returns>
            private static IList<FileInfo> GetFiles(string path)
            {
                var files = Directory.GetFiles(path, "*.*", SearchOption.AllDirectories);
    
                return files.Select(file => new FileInfo(file)).ToList();
            }
        }
    View Code

        运行结果如下:

        五、查找两个集合间的差异

        此示例演示如何使用LINQ对两个字符串列表进行比较,并输出那些位于text1.txt中但不在text2.txt中的行。

    Bankov, Peter
    Holm, Michael
    Garcia, Hugo
    Potra, Cristina
    Noriega, Fabricio
    Aw, Kam Foo
    Beebe, Ann
    Toyoshima, Tim
    Guy, Wey Yuan
    Garcia, Debra
    text1.txt
    Liu, Jinghao
    Bankov, Peter
    Holm, Michael
    Garcia, Hugo
    Beebe, Ann
    Gilchrist, Beth
    Myrcha, Jacek
    Giakoumakis, Leo
    McLin, Nkenge
    El Yassir, Mehdi
    text2.txt
        class Program
        {
            static void Main(string[] args)
            {
                #region LINQ 查找两个集合间的差异
                //创建数据源
                var text1 = File.ReadAllLines(@"..\..\text1.txt");
                var text2 = File.ReadAllLines(@"..\..\text2.txt");
    
                //创建查询,这里必须使用方法语法。
                var query = text1.Except(text2);
    
                //执行查询
                Console.WriteLine("The following lines are in text1.txt but not text2.txt");
                foreach (var name in query)
                {
                    Console.WriteLine(name);
                }
                Console.Read();
                #endregion
            }
        }
    View Code

        运行结果如下:

        注:某些类型的查询操作(如 Except<TSource>Distinct<TSource>Union<TSource> 和 Concat<TSource>)只能用基于方法的语法表示。

        六、排序或过滤任意单词或字段的文本数据

        下面的示例演示如何按结构化文本(如逗号分隔值)行中的任意字段对该文本行进行排序,可在运行时动态指定该字段。

        假定scores.csv中的字段表示学生的ID号,后面跟着四个测验分数。

    111, 97, 92, 81, 60
    112, 75, 84, 91, 39
    113, 88, 94, 65, 91
    114, 97, 89, 85, 82
    115, 35, 72, 91, 70
    116, 99, 86, 90, 94
    117, 93, 92, 80, 87
    118, 92, 90, 83, 78
    119, 68, 79, 88, 92
    120, 99, 82, 81, 79
    121, 96, 85, 91, 60
    122, 94, 92, 91, 91
    scores.csv
        class Program
        {
            static void Main(string[] args)
            {
                #region LINQ 排序或过滤任意单词或字段的文本数据
                //创建数据源
                var scores = File.ReadAllLines(@"..\..\scores.csv");
                //可以改为0~4的任意值
                const int sortIndex = 1;
                //演示从方法返回查询变量,非查询结果。
                foreach (var score in SplitSortQuery(scores, sortIndex))
                {
                    Console.WriteLine(score);
                }
                Console.Read();
                #endregion
            }
    
            /// <summary>
            /// 分割字符串排序
            /// </summary>
            /// <param name="scores"></param>
            /// <param name="num"></param>
            /// <returns></returns>
            private static IEnumerable<string> SplitSortQuery(IEnumerable<string> scores, int num)
            {
                var query = from line in scores
                            let fields = line.Split(',')
                            orderby fields[num] descending
                            select line;
                return query;
            }
        }
    View Code

        运行结果如下:

        七、对一个分割的文件的字段重新排序

        逗号分隔值 (CSV) 文件是一种文本文件,通常用于存储电子表格数据或其他由行和列表示的表格数据。通过使用Split方法分隔字段,可以非常轻松地使用

    LINQ来查询和操作CSV文件。事实上,可以使用此技术来重新排列任何结构化文本行部分。此技术不局限于CSV文件。

        在下面的示例中,假定有三列分别代表学生的“姓氏”、“名字”和“ID”,这些字段基于学生的姓氏按字母顺序排列。查询生成一个新序列,其中首先出现的是

    ID列,后面的第二列组合了学生的名字和姓氏。根据ID字段重新排列各行,结果保存到新文件,但不修改原始数据。

    Adams,Terry,120
    Fakhouri,Fadi,116
    Feng,Hanying,117
    Garcia,Cesar,114
    Garcia,Debra,115
    Garcia,Hugo,118
    Mortensen,Sven,113
    O'Donnell,Claire,112
    Omelchenko,Svetlana,111
    Tucker,Lance,119
    Tucker,Michael,122
    Zabokritski,Eugene,121
    spread.csv
        class Program
        {
            static void Main(string[] args)
            {
                #region LINQ 对一个分割的文件的字段重新排序
                //数据源
                var lines = File.ReadAllLines(@"..\..\spread.csv");
                //将旧数据的第2列的字段放到第一位,逆向结合第0列和第1列的字段。
                var query = from line in lines
                            let t = line.Split(',')
                            orderby t[2]
                            select $"{t[2]} {t[1]} {t[0]}";
    
                foreach (var item in query)
                {
                    Console.WriteLine(item);
                }
                Console.Read();
                #endregion
            }
        }
    View Code

        运行结果如下:

        八、组合和比较字符串集合

        此示例演示如何合并包含文本行的文件,然后排序结果。具体来说,此示例演示如何对两组文本行执行简单的串联、联合和交集。

        注:text1.txt及text2.txt与五、的一致。

        class Program
        {
            static void Main(string[] args)
            {
                #region LINQ 组合和比较字符串集合
                var text1 = File.ReadAllLines(@"..\..\text1.txt");
                var text2 = File.ReadAllLines(@"..\..\text2.txt");
    
                //简单连接并排序,重复保存。 
                var concatQuery = text1.Concat(text2).OrderBy(x => x);
                OutputQueryResult(concatQuery, "Simple concatenate and sort,duplicates are preserved:");
    
                //基于默认字符串比较器连接,并删除重名。 
                var unionQuery = text1.Union(text2).OrderBy(x => x);
                OutputQueryResult(unionQuery, "Union removes duplicate names:");
    
                //查找在两个文件中出现的名称 
                var intersectQuery = text1.Intersect(text2).OrderBy(x => x);
                OutputQueryResult(intersectQuery, "Merge based on intersect:");
    
                //在每个列表中找到匹配的字段,使用concat将两个结果合并,然后使用默认的字符串比较器进行排序。
                const string nameMatch = "Garcia";
                var matchQuery1 = from name in text1
                                  let t = name.Split(',')
                                  where t[0] == nameMatch
                                  select name;
                var matchQuery2 = from name in text2
                                  let t = name.Split(',')
                                  where t[0] == nameMatch
                                  select name;
                var temp = matchQuery1.Concat(matchQuery2).OrderBy(x => x);
                OutputQueryResult(temp, $"Concat based on partial name match \"{nameMatch}\":");
    
                Console.Read();
                #endregion
            }
    
            /// <summary>
            /// 输出查询结果
            /// </summary>
            /// <param name="querys"></param>
            /// <param name="title"></param>
            private static void OutputQueryResult(IEnumerable<string> querys, string title)
            {
                Console.WriteLine(Environment.NewLine + title);
                foreach (var query in querys)
                {
                    Console.WriteLine(query);
                }
                Console.WriteLine($"Total {querys.Count()} names in list.");
            }
        }
    View Code

        运行结果如下:

        九、从多个源中填充对象集合

        不要尝试将内存中的数据或文件系统中的数据与仍在数据库中的数据相联接。此种跨域联接会生成未定义的结果,因为数据库查询和其他类型的源定义联

    接运算的方式可能不同。另外,如果数据库中的数据量足够大,则存在此类运算引发内存不足异常的风险。若要将数据库数据与内存中的数据相联接,请首

    先对数据库查询调用ToList或ToArray,然后对返回的集合执行联接。

        class Program
        {
            static void Main(string[] args)
            {
                #region LINQ 从多个源中填充对象集合
                //spread.csv每行包含姓氏、名字和身份证号,以逗号分隔。例如,Omelchenko,Svetlana,111
                var names = File.ReadAllLines(@"..\..\spread.csv");
                //scores.csv每行包括身份证号码和四个测试评分,以逗号分隔。例如,111,97,92,81,60 
                var scores = File.ReadAllLines(@"..\..\scores.csv");
    
                //使用一个匿名的类型合并数据源。
                //注:动态创建一个int的考试成绩成员列表。
                //跳过分割字符串中的第一项,因为它是学生的身份证,不是一个考试成绩。
                var students = from name in names
                               let t1 = name.Split(',')
                               from score in scores
                               let t2 = score.Split(',')
                               where t1[2] == t2[0]
                               select new
                               {
                                   FirstName = t1[0],
                                   LastName = t1[1],
                                   ID = Convert.ToInt32(t1[2]),
                                   ExamScores = (from score in t2.Skip(1) select Convert.ToInt32(score)).ToList()
                               };
    
                foreach (var student in students)
                {
                    Console.WriteLine($"The average score of {student.FirstName} {student.LastName} is {student.ExamScores.Average()}.");
                }
                Console.Read();
                #endregion
            }
        }
    View Code

        运行结果如下:

        十、使用group将一个文件拆分成多个文件

        此示例演示一种进行以下操作的方法:合并两个文件的内容,然后创建一组以新方式组织数据的新文件。

        注:text1.txt及text2.txt与五、的一致。

        class Program
        {
            static void Main(string[] args)
            {
                #region LINQ 使用group将一个文件拆分成多个文件
                var text1 = File.ReadAllLines(@"..\..\text1.txt");
                var text2 = File.ReadAllLines(@"..\..\text2.txt");
    
                //并集:连接并删除重复的名字
                var mergeQuery = text1.Union(text2);
                //根据姓氏的首字母对姓名进行分组
                var query = from name in mergeQuery
                            let t = name.Split(',')
                            group name by t[0][0] into g
                            orderby g.Key
                            select g;
    
                //注意嵌套的 foreach 循环
                foreach (var g in query)
                {
                    var fileName = @"testFile_" + g.Key + ".txt";
                    Console.WriteLine(g.Key + ":");
    
                    //写入文件
                    using (var sw = new StreamWriter(fileName))
                    {
                        foreach (var name in g)
                        {
                            sw.WriteLine(name);
                            Console.WriteLine(" " + name);
                        }
                    }
                }
                Console.Read();
                #endregion
            }
        }
    View Code

        运行结果如下:

        十一、向不同的文件中加入内容

        此示例演示如何联接两个逗号分隔文件中的数据,这两个文件共享一个用作匹配键的共同值。如果您必须将两个电子表格的数据或一个电子表格和一个其

    他格式的文件的数据组合为一个新文件,则此技术很有用,还可以修改此示例以适合任意种类的结构化文本。

        class Program
        {
            static void Main(string[] args)
            {
                #region LINQ 向不同的文件中加入内容
                var names = File.ReadAllLines(@"..\..\spread.csv");
                var scores = File.ReadAllLines(@"..\..\scores.csv");
    
                //该查询基于ID连接两个不同的电子表格
                var query = from name in names
                            let t1 = name.Split(',')
                            from score in scores
                            let t2 = score.Split(',')
                            where t1[2] == t2[0]
                            orderby t1[0]
                            select $"{t1[0]},{t2[1]},{t2[2]},{t2[3]},{t2[4]}";
    
                //输出
                OutputQueryResult(query, "Merge two spreadsheets:");
                Console.Read();
                #endregion
            }
    
            /// <summary>
            /// 输出查询结果
            /// </summary>
            /// <param name="querys"></param>
            /// <param name="title"></param>
            private static void OutputQueryResult(IEnumerable<string> querys, string title)
            {
                Console.WriteLine(Environment.NewLine + title);
                foreach (var query in querys)
                {
                    Console.WriteLine(query);
                }
                Console.WriteLine($"Total {querys.Count()} names in list.");
            }
        }
    View Code

        运行结果如下:

        十二、计算一个CSV文本文件中的列值

        此示例演示如何对.csv文件的列执行诸如Sum、Average、Min和Max等聚合计算,此示例可以应用于其他类型的结构化文本。

        class Program
        {
            static void Main(string[] args)
            {
                #region LINQ 计算一个CSV文本文件中的列值
                var scores = File.ReadAllLines(@"..\..\scores.csv");
    
                //指定要计算的列
                const int examNum = 3;
    
                //+1表示跳过第一列
                //统计单列
                SingleColumn(scores, examNum + 1);
    
                Console.WriteLine();
    
                //统计多列
                MultiColumns(scores);
    
                Console.Read();
                #endregion
            }
    
            /// <summary>
            /// 统计单列
            /// </summary>
            /// <param name="lines"></param>
            /// <param name="examNum"></param>
            private static void SingleColumn(IEnumerable<string> lines, int examNum)
            {
                Console.WriteLine("Single Column Query:");
    
                //查询步骤:
                //1.分割字符串
                //2.对要计算的列的值转换为int
                var query = from line in lines
                            let t = line.Split(',')
                            select Convert.ToInt32(t[examNum]);
    
                //对指定的列进行统计
                var average = query.Average();
                var max = query.Max();
                var min = query.Min();
    
                Console.WriteLine($"Exam #{examNum}: Average:{average:##.##} High Score:{max} Low Score:{min}");
            }
    
            /// <summary>
            /// 统计多列
            /// </summary>
            /// <param name="lines"></param>
            private static void MultiColumns(IEnumerable<string> lines)
            {
                Console.WriteLine("Multi Column Query:");
    
                //查询步骤:
                //1.分割字符串
                //2.跳过ID列(第一列)
                //3.将当前行的每个评分都转换成int,并选择整个序列作为一行结果。 
                var query1 = from line in lines
                             let t1 = line.Split(',')
                             let t2 = t1.Skip(1)
                             select (from t in t2 select Convert.ToInt32(t));
    
                //执行查询并缓存结果以提高性能
                var results = query1.ToList();
                //找出结果的列数
                var count = results[0].Count();
    
                //执行统计
                for (var i = 0; i < count; i++)
                {
                    var query2 = from result in results
                                 select result.ElementAt(i);
                    var average = query2.Average();
                    var max = query2.Max();
                    var min = query2.Min();
                    //#1表示第一次考试
                    Console.WriteLine($"Exam #{i + 1} Average: {average:##.##} High Score: {max} Low Score: {min}");
                }
    
            }
        }
    View Code

        运行结果如下:

    展开全文
    qq_45534098 2020-04-26 08:20:09
  • 203KB mijingai 2017-09-16 10:19:54
  • ) set @str='' -- 必须先赋值 ))+',' from( select [objid],sfrq from tablename ) tb order by tb.sfrq print @str…今天在统计报表的时候有这么一个需求,将一列字符串拼接成一行,然后展示到新的列中. 每一项的服务...

    ) set @str='' -- 必须先赋值 ))+',' from( select [objid],sfrq from tablename ) tb order by tb.sfrq print @str…

    今天在统计报表的时候有这么一个需求,将一列字符串拼接成一行,然后展示到新的列中. 每一项的服务列表如下: 最终想要的结果是 sql如下: select AuxTypeName + ',' from ( SELECT DISTINCT(AuxTypeName) FROM _VIPHall_Link_AuxType LEFT JOIN dbo.[_VIPHall] ON [_VIPHall_Link_AuxType].VIPHallID = [_VIPHall].VIPHallID LEFT JOI…

    名称 海鲜水产 水果蔬菜 海参 肉禽蛋 牛排 腊味 生鲜食品 将以上一列变成: 生鲜食品,海鲜水产,水果蔬菜,海参,牛排,肉禽蛋,腊味 sql for xml path('')…

    js对象数组中的某属性值 拼接成字符串 var objs=[ {id:1,name:'张三'}, {id:2,name:'李四'}, {id:3,name:'王五'}, {id:4,name:'赵六'}, ]; var idsStr = objs.map(function(obj,index){ return obj.id; }).join(","); console.log(idsStr);…

    使用场景:把某一列值转换为逗号分隔的字符串 例子:比如查询所有的的表空间如下,现在要获得所有的表空间用逗号分隔的字符串(比如rman duplicate的时候skip表空间) SQL> select name from v$tablespace; NAME ------------------------------ SYSTEM SYSAUX CTXD APPS_TS_TX_DATA APPS_TS_TX_IDX OWAPUB APPS_TS_QUEUES ODM OLAP APPS_TS_T…

    在我们开发的过程中,难免遇到一种场景,把某个表中的的某个列的值拼接成用逗号隔开的一行数据 如图:我们把UserId列拼接成一行数据 -------> 为此我写了一个存储过程来解决此类问题. -- Author:        LHM -- Create date: 2015-01-15 -- Description:    把表中某一个列按照逗号拼接成一行 --示例: EXEC [Sp_TableToString] 'cast([UserId] as varchar)','[X_RoleUser…

    利用拼接操作符“||”或者 CONCAT('','')函数,将不同列的值 拼接成一个 字符串   -- 方法一:推荐 SELECT S.TEAM ||'**'|| S.NAME ||'**'|| S.JOB_NUMBER FROM STAFF S WHERE S.PASS ='123456' AND S.TEAM ='南方' --方法二:繁琐. SELECT CONCAT(  CONCAT( CONCAT( CONCAT(S.TEAM,'**' ),S.NAME) ,'**') , S.JOB_…

    sql server 自增列,值突然增大1000的情况   解决方法: 1 打开配置管理器2左面点击sql服务3右面 右键点击SQL Server(MSSQLSERVER) 4点击 启动参数5 在参数 里输入  -T272 点增加…

    1.链接数据库 <?php include("DBDA.class.php"); $db=new DBDA(); $sql="select * from fangzi"; $attr=$db->Query($sql); ?> 2.建立复选框表单

    区域:

    前言: 前段时间因为项目进度比较繁重所以一直都没有时间更新博客,内心深深的负重感,没有履行年初立下的flag.不过这个月会把上个月没有完成的任务补上来,咱们可不是喜欢拖欠任务的攻城狮.哈哈,废话不多说,接下来是要总结下关于对接支付时我们经常会遇到的将对应集合中的参数按照ASCII码按照从小到大排序,并使用URL键值对的格式(即key1=value1&key2=value2…)拼接成字符串stringA,其实对于有些参数比较少的而已我们完全可以自己使用固定拼接的方式拼接好来,但是假如参数集合中的参…

    1.查询要批量删除的表 SELECT * FROM USER_TABLES SELECT 'DROP '||'TABLE ' || TABLE_NAME ||' ;' ,1 FROM USER_TABLES WHERE TABLE_NAME LIKE 'T_DIM%'; 2.创建临时表 CREATE TABLE tab_xn_ddd (names varchar2(100),idd number(2)); 3.将要删除的表结果插入到数据库中 insert into hos_tab_xn_ddd…

    在博问上看到一个提问“MSSQL如何将查询结果拼接成字符串” ,想了一下应该怎么实现呢,在c#等语言下好实现,但在sql里实现.还真没做过. 目标:想要在SQL中将查询的结果拼接为 '1','2','3','4','5' 分析:要进行拼接就要取得每行的值,想到了游标可以做到.于是有了下面的方法 select name from area 查询结果如下 办公楼车间宿舍未知宜家厂综合楼 解决方法: declare @name varchar(50)declare @result varchar(50…

    装饰者模式的学习(c#) 案例转自https://www.cnblogs.com/stonefeng/p/5679638.html //主体基类 using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Threading.Tasks; namespace DecoratorModeDemo{   abstract class PanCake    {       …

    项目中我做修改用户个人资料的时候,有一个需求是帮助人员的帮助类型如图下所示: 当初想如果是asp.net控件的话应该很简单实现,如果不是基于easyUI框架那就太简单了,现在是受框架的限制与是前端html控件,所以还是会稍微多转化一下, 前提 这个是个人资料的修改,需要如果用户已经选择某项的话,需要加载时打上对勾:如图所示 思路 对于数据的存储考虑过可以存放到多个字段里面,这样操作起来方便,现在通过查询资料是可以把这些只要是选中的某项都可以拼接成字符串存入到数据库中的一个字段中,读取的时候需要先…

    这两天敲代码的时候,偶然间发现一个好玩的事情,分享一下,记录一下. 该段代码主要是:先产生的几个整数,把整数转换成对应的字符,最后的字符拼接成字符串,在把字符拼接成字符串的时候,个人因为偷懒使用+号进行操作,出现了一点小惊喜.拼接以后出现了两种不同的结果,感到十分的意外,所以分析了一下出现的结果,记录一下. package top.supertd.www; import java.util.concurrent.ThreadLocalRandom; public class TestString…

    PHP[知识分享] 数组拼接成字符串 <?php // 格式: [二维数组] Array ( [0] => Array ( [topicid] => 1 ) [1] => Array ( [topicid] => 2 ) [2] => Array ( [topicid] => 6 ) ) //方法一: $topicid = ' '; //变量赋值为空 //用foreach 遍历下二维数组 foreach($arrs as $key=>$vals){ $top…

    一.json相关概念 json,全称为javascript object notation,是一种轻量级的数据交互格式.采用完全独立于语言的文本格式,是一种理想的数据交换格式. 同时,json是javascript是原生格式,所以javascript操作处理json不需要任何包,api,任何依赖. json中有两个结构:(1)数组(2)对象 (1)什么是数组 数组就是以"["开始,以“]”结束的,值之间运用 “,”(逗号)分隔. 比如: [{ "key": &quo…

    Date.Time类型拼接成字符串 语言用的是kotlin,和Java类似 var time = "" val sdf1 = SimpleDateFormat("yyyy/MM/dd") val sdf2 = SimpleDateFormat("kk:mm") time = sdf1.format(this.dateStart) + " " + sdf2.format(this.timeStart) 首先定义SimpleDat…

    最近在项目中遇到个问题,需要将表中某列字段合并成字符串输出,如果直接通过代码全部读取出来,再遍历进行拼接显然不是最好的方法,所以想着能否在数据读取的时候直接拼接好返回,网上搜了可通过for xml来实现. 首先,准备好需要的数据,脚本如下: if exists (select * from sysObjects where id=object_id('Student')) drop table Student go create table Student ( Id int, Name ) )…

    select stuff(( ,,'') as UserNamestr 注释:查询出tabname表中的UserName列的所有内容,并将内容拼接成UserNamestr…

    #for xml path(param)--将查询结果以xml格式输出 select id,name from table1 for xml path --id和name为table1的真实字段 - path后面没有参数时,每行数据被默认标签包裹,每行列数据被被其列名标签包裹. 上面sql的结果可如下: holab &…

    /// /// list转换成格式的字符串 /// /// 拼接格式字符串 /// /// public string GetStrFromList(string param, L…

    有这样的一个需求:对于一组checkbox,当点击每个checkbox后,把当前处于选中状态的checkbox的某个属性值取出来连接成字符串,并以逗号分开. html部分: 选项一 选项二
    &…

    //拼接产品字符串 var productArray = new Array(); $.each($("#fmeatask-subSystem").find("option:selected"), function(index, obj) { productArray.push($(obj).text()); }); $.each($("#fmeatask-assembly").find("option:selected"),…

    MySQL中: [sql] view plaincopyprint? -- 单列拼接,先查出一行,再加上逗号,接着拼接 查出的下一行 select group_concat(E.SUPPORT) from ENGINES E where E.XA IN('YES','NO') --结果如下:YES,YES,YES,YES,YES,YES,DEFAULT,YES -- 将查询的结果中的 "," 号,替换成 "**" 号 select REPLACE(group_con…

    -- 单列拼接,先查出一行,再加上逗号,接着拼接 查出的下一行 SELECT GROUP_CONCAT(user_id) FROM user; -- result 160,160,160,196 -- 将查询的结果中的 "," 号,替换成 "**" 号 SELECT REPLACE(GROUP_CONCAT(user_id),',','**') FROM user; -- result 160**160**160**196 -- 将查询的结果中 重复 的记录 去掉,…

    展开全文
    weixin_34533343 2021-05-07 09:39:46
  • 一、 字符串合并 表名:test 字段:  id int  name nvarchar(50) 字段值:  - - SQL" style="margin:0px; padding:0px; border:none; list-style:none">

    一、           字符串合并

    表名:test

    字段:

             id               int

             name        nvarchar(50)

    字段值:

             

    期望结果:

             id               nameStr

             -----------------------------

             1                a,b,c

             2                d,e

             3                f

    SQL实现:

    1、 利用函数解决

     

    -- 创建处理函数

    CREATE FUNCTION dbo.f_str(@id int)

    RETURNS varchar(8000)

    AS

    BEGIN

        DECLARE @r varchar(8000)

        SET @r = ''

        SELECT @r = @r + ',' + [name]

        FROM [test]

        WHERE [id]=@id

        RETURN STUFF(@r, 1, 1, '')

    END

    GO

     

    -- 调用函数

    SELECT [id], [nameStr]=dbo.f_str(id)

    FROM [test]

    GROUP BY [id]

     

    运行结果:

      

     

     

    2、 直接用SQL解决

     

    SELECT *

    FROM(

        SELECT DISTINCT [id]

        FROM [test]

    )A

    OUTER APPLY(

        SELECT

           [nameStr]= STUFF(REPLACE(REPLACE(

           (

               SELECT [name] FROM [test] N

               WHERE [id] = A.id

               FOR XML AUTO

           ), '<N name="', ','), '"/>', ''), 1, 1, '')

    )M

     

    运行结果:

      

     

    看不懂这个SQL不要紧,下面有详细分析

     

    二、           详细分析

    1、  STUFF

    作用:

             STUFF函数将字符串插入另一字符串。它在第一个字符串中从开始位置删

    除指定长度的字符;然后将第二个字符串插入第一个字符串的开始位置。

    语法:

            STUFF ( character_expression , start , length ,character_expression )

    参数:

    character_expression

                         一个字符数据表达式。character_expression可以是常量、变量,也可

                         以是字符列或二进制数据列。

    start

                         一个整数值,指定删除和插入的开始位置。如果startlength为负,

          则返回空字符串。如果start比第一个character_expression长,则返

          回空字符串。start可以是bigint类型。

                                 length

                                            一个整数,指定要删除的字符数。如果length比第一个

    character_expression长,则最多删除到第一个character_expression

    中的最后一个字符。Length可以是bigint类型。

    返回类型:

             如果character_expression是受支持的字符数据类型,则返回字符数据。

     如果character_expression是一个受支持的 binary 数据类型,则返回二

     进制数据。

    注释:

       如果开始位置或长度值是负数,或者如果开始位置大于第一个字符串的长

     度,将返回空字符串。如果要删除的长度大于第一个字符串的长度,将删

     除到第一个字符串中的最后一个字符。如果结果值大于返回类型支持的最

     大值,则产生错误。

    示例:

                  SELECT STUFF('abcdef', 2, 3, 'ijklmn');

    GO

    结果:

             

     

    SELECT STUFF('abcdef', -2, 3, 'ijklmn');

    GO

    结果:

             

     

    SELECT STUFF('abcdef', 2, 10, 'ijklmn');

    GO

    结果:

             

     

    2、  CROSS APPLY  OUTER APPLY

     使用 APPLY 运算符可以为实现查询操作的外部表表达式返回的每个行调用表值函数。表值函数作为右输入,外部表表达式作为左输入。通过对右输入求值来获得左输入每一行的计算结果,生成的行被组合起来作为最终输出。APPLY 运算符生成的列的列表是左输入中的列集,后跟右输入返回的列的列表。

     APPLY 有两种形式:CROSS APPLY  OUTER APPLYCROSS APPLY 仅返回外部表中通过表值函数生成结果集的行。OUTER APPLY 既返回生成结果集的行,也返回不生成结果集的行,其中表值函数生成的列中的值为NULL

     

    用示例来区分两者:

    第一张表:

                表名:student

                字段名:

                         

                字段值:

                         

    第二张表:

                表名:student_class

                字段名:

                         

                字段值:

                         

     

    CROSS APPLY

    SELECT *

    FROM [student] a

    CROSS APPLY(

      SELECT [class], [score]

      FROM [student_class]

      WHERE student_id = a.id

    ) b

     

    运行结果:

      

     

     

    OUTER APPLY

    SELECT *

    FROM [student] a

    OUTER APPLY(

      SELECT [class], [score]

      FROM [student_class]

      WHERE student_id = a.id

    ) b

     

    运行结果:

         

     

    3、  FOR XML AUTO

    将结果转换为XML结构,例如对于上面2中的student表,执行以下语句

    SELECT *

    FROM [student]

    FOR XML AUTO

     

    运行结果:

      

    展开全文
    wwsscc168 2016-03-15 16:49:49
  • a13407142317 2021-11-03 14:37:45
  • weixin_30528371 2018-02-07 17:51:00
  • jsjpanxiaoyu 2016-07-21 20:09:11
  • wanglei_samrtfish 2012-02-20 09:40:00
  • p2394736 2017-11-25 09:21:10
  • weixin_42549117 2021-03-08 22:53:16
  • qq_40741855 2018-10-23 17:19:25
  • CHCH998 2018-08-10 19:34:20
  • weixin_35040154 2021-05-19 10:37:18
  • pan_junbiao 2011-11-26 22:30:39
  • w36680130 2020-01-08 08:10:30
  • weixin_39999222 2021-01-17 14:23:25
  • weixin_34256074 2017-07-03 09:58:00
  • yuyuncheng 2013-04-09 10:18:25
  • weixin_33813128 2013-03-05 13:46:00
  • ejinxian 2016-08-29 10:59:12
  • qq_43667111 2019-02-24 12:45:00
  • weixin_30510153 2016-10-18 11:12:00
  • jsjyyjs07 2014-11-07 15:56:18
  • Slience_dream 2017-11-09 13:36:36

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 1,496
精华内容 598
关键字:

linqsql合并字符串