【发布时间】:2011-09-08 03:34:57
【问题描述】:
我有一个包含以下数据的表格:
节点 ID 外部 ID 50 601 56 700,701如何编写分割 ExternalIds 列并返回的 SQL 语句:
节点 ID 外部 ID 50 601 56 700 56 701我发现了很多用户定义的函数和过程,它们将字符串拆分成一个表,但我无法让它们中的任何一个工作
编辑
创建表 #tmpTable (NodeId int, ExternalIds varchar(50)) 插入 #tmpTable (NodeId,ExternalIds) 值 (50, '600') 插入 #tmpTable (NodeId,ExternalIds) 值 (56, '700,701') 选择节点ID, (SELECT * FROM [dbo].[SplitString](select * from #tmpTable,',') where NodeId=56)from #tmpTable) 其中节点 ID=56 删除表#tmpTable其中 SplitString 基于以下内容:
设置 ANSI_NULLS ON 走 设置 QUOTED_IDENTIFIER ON 走 创建函数 [dbo].[SplitString] ( -- 在此处添加函数的参数 @myString varchar(500), @deliminator varchar(10) ) 回报 @ReturnTable 表 ( -- 在此处添加 TABLE 变量的列定义 [id] [int] IDENTITY(1,1) 非空, [部分] [varchar](50) NULL ) 作为 开始 声明@iSpaces int 声明@part varchar(50) --初始化空格 选择@iSpaces = charindex(@deliminator,@myString,0) 而@iSpaces > 0 开始 选择@part = substring(@myString,0,charindex(@deliminator,@myString,0)) 插入@ReturnTable(part) 选择@part 选择@myString = substring(@mystring,charindex(@deliminator,@myString,0)+ len(@deliminator),len(@myString) - charindex(' ',@myString,0)) 选择@iSpaces = charindex(@deliminator,@myString,0) 结尾 如果 len(@myString) > 0 插入@ReturnTable 选择@myString 返回 结尾我正在尝试从 Umbraco(cms)的数据库中获取一些数据,该数据库是用逗号分隔的值设计的。
谢谢 托马斯
【问题讨论】:
-
请说明当您尝试让这些功能发挥作用时发生了什么。
-
“我发现了很多用户定义的函数和过程,它们将字符串拆分成一个表,但我无法让它们中的任何一个工作”你试过什么?
-
也许您应该正确设计您的数据库。数据几乎不应该存储在分隔列表中。
-
@HLGEM。也许这是为了将数据迁移到 1NF 中的表?
-
嗨。我用我当前的 sql 更新了问题
标签: sql-server