【发布时间】:2014-08-13 10:29:00
【问题描述】:
我有一个包含几行数据的表格,如下所示:
16 W:\2-Work\ALBO\00_Proposal\ALxO_Amendement #1_20091022_signed.pdf
17 W:\2-Work\ALBO\00_Proposal\Level1\ALBO_Amendment #1_20110418.docx
18 W:\2-Work\ALBO\00_Proposal\A\BR\T\X_#1_20110418_final.docx
19 W:\2-Work\ALBO\MyOptionl\AO_Amendment_2 August 2013.docx
我创建了从Col1 到Col10 的列
我想用分隔符'\'分隔每个值
这个想法是在每一列上都有:
Col1 | Col2 | Col3 | Col4 | Col5 |etc...
W: 2-Work ALBO 00_Proposal ALxO_Amendement #1_20091022_signed.pdf
我知道如何使用charindex 和substring,但每行(8500 行)的“\”数不同。
你能帮帮我吗?
我使用的是 Microsoft SQL Server 2012。
非常感谢
编辑 2014/06/24
我的目标是生成完整路径和拆分路径的 XML。
其实这是我的想法:
1 - 识别临时表中的所有 ID 进行循环
--On déclare une table tempo 声明@IdTable 表( id int, src nvarchar(max))
--Injecte tous les id exists de la table 插入@IdTable (id, src) 从albo中选择id、src
--on déclare l'id de début en commencant par le plus petit 声明 @id int = (select min(id) from ALBO)
--Tnat qu'il reste des ID on continue la boucle 而@id 不为空 开始
打印@id 从@IdTable 中选择@id = min(id),其中ID > @id 结尾 --Fin de la boucle des ID
2 - 拆分每一行并更新列(Colx => 之前已经创建了 Clolumns) 这段代码应该放在我之前的循环中。
声明@products varchar(max) = 'W:\2-Work\ALBO\13_WP Reporting\13_07_Monthly reports\13_07_01 Archives\2012\201211\Draft\ALBO-MR-201211\gp_scripts\v1\Top10_duree_final.txt' 声明@individual varchar(max) = null
WHILE LEN(@products) > 0 开始 如果 PATINDEX('%\%',@products) > 0 开始 SET @individual = SUBSTRING(@products, 0, PATINDEX('%\%',@products)) 选择@individual --我必须用ID制作和更新
SET @products = SUBSTRING(@products, LEN(@individual + '\') + 1,
LEN(@products))
END
ELSE
BEGIN
SET @individual = @products
SET @products = NULL
print @individual
END
结束
【问题讨论】:
-
这不是一个好的表格设计。你想做什么?
-
您可以创建一个函数,通过“\”拆分数据并为每一行返回一个表,然后使用拆分函数中的插入语句将表插入 col1 到 col10。尝试编写代码来实现上述内容,以防您遇到我们在这里的问题! :)
-
你不是把'\'换成''吗?
-
我想“分解”该行并将“Col1”更新为“Col10”,其值如下:“This\Is\My\Sentence”=> Col1:This | Col2 : 是 | Col3 : 我的 | Col4 : 句子
-
您要解决的真正问题是什么?为什么您认为创建 10 个任意列是解决此问题的方法? (不是)。如果您正在尝试收集有关文件夹的统计信息,还有其他方法可以做到这一点
标签: sql tsql sql-server-2012