sql server 2008 数据库列值用逗号隔开保存后,需要将其查询为多个列值
需求:
需要的是将上面的表中的name值分别取出来,以列的形式形式展示
如下:
方法:这里是使用函数的方式来实现的,创建该函数
USE [PersonDB] GO SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO CREATE function [dbo].[SplitSubString] ( @Expression varchar(8000), @Delimiter varchar(100), @n int ) returns varchar(8000) as begin declare @p int,@temp varchar(8000); set @p = CharIndex(@Delimiter,@Expression); set @temp = @Expression; if @p > 0 begin set @p = @p + len(@Delimiter) - 1; end declare @i int; set @i = 1; while @i < @n begin set @i = @i + 1; set @Expression = substring (@Expression, @p + 1,len(@Expression) - @p ); set @p = CharIndex(@Delimiter,@Expression); if @p > 0 begin set @p = @p + len(@Delimiter) - 1; end else begin break; end end declare @s varchar(1000); if @p = 0 and @i = @n begin if @n > 1 begin if len(@Expression) < len(@temp) begin set @s=@Expression; end else begin set @s = null; end end else begin set @s=@Expression; end end else if @i = @n begin set @s = substring(@Expression, 1,@p - len(@Delimiter)); end return @s; end GO
使用方式:
SELECT ID, name, classname, dbo.SplitSubString(name,',',1) nama1, dbo.SplitSubString(name,',',2) nama2, dbo.SplitSubString(name,',',3) nama3 FROM dbo.STUDENT_CLASS
说明:直接用这个函数SplitSubString 第一个参数 是需要分割的字段,第二个参数是 中间的分割符号,第三个参数表示的是显示的位置从1开始
但是:列里面的值数量不对齐的话,那么
用上面的查出来的,就会少一个
或者 一个为null值(对于取值这个应该没关系)
所以,这个使用的话,就实际情况而定。
最后附上一个,查询列值中的某个字符的个数sql
select *, len(name)-len(replace(name, ',', ''))+1 '逗号的个数' from STUDENT_CLASS
结果:
分类:
sql server
标签:
sql server 2008
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通