我一直试图解决问题一段时间,并研究了游标和while循环等方法。但是,我认为也许这些对我的目的来说不是必需的。我正在使用MS SQL Studio 2012.我的表中有一个列,其中包含由分号分隔的变量字符串数据(我发送了此数据):
THIS IS ONE COLUMN:
245;345;2114;
3421;34;
31;
我正在尝试将数据分成基于分号的列数:
FIRST COLUMN | SECOND COLUMN | THIRD COLUMN | etc
245 345 2114
3421 34
31
我有一个函数可以用分号将每一行分成一个表。在一行上调用该函数: 旧表中的“3421; 34”变为:
ID | DATA
1 3421
2 34
我的问题是,如何将此功能应用于主表中的每一行。我应该使用while循环(这可能需要永远!)?非常感谢。
答案 0 :(得分:0)
如果您需要一个快速而肮脏的解决方案,两个SUBSTRING_INDEX函数将完成这项工作:
SELECT
SUBSTRING_INDEX(SUBSTRING_INDEX(col, ';', 1), ';', -1) col1,
SUBSTRING_INDEX(SUBSTRING_INDEX(col, ';', 2), ';', -1) col2,
SUBSTRING_INDEX(SUBSTRING_INDEX(col, ';', 3), ';', -1) col3,
SUBSTRING_INDEX(SUBSTRING_INDEX(col, ';', 4), ';', -1) col4,
SUBSTRING_INDEX(SUBSTRING_INDEX(col, ';', 5), ';', -1) col5
FROM
yourtable
请参阅小提琴here。请注意,这将起作用,因为每列都使用;
进行操作,并且如果列中没有值,您将获得EMPTY列而不是NULL列。
修改:如果您需要更新现有表格,则需要先添加一些新列:
ALTER TABLE yourtable ADD COLUMN col1 VARCHAR(20);
ALTER TABLE yourtable ADD COLUMN col2 VARCHAR(20);
...
然后您可以启动UPDATE查询:
UPDATE yourtable
SET
col1=SUBSTRING_INDEX(SUBSTRING_INDEX(col, ';', 1), ';', -1),
col2=SUBSTRING_INDEX(SUBSTRING_INDEX(col, ';', 2), ';', -1),
col3=SUBSTRING_INDEX(SUBSTRING_INDEX(col, ';', 3), ';', -1),
col4=SUBSTRING_INDEX(SUBSTRING_INDEX(col, ';', 4), ';', -1),
col5=SUBSTRING_INDEX(SUBSTRING_INDEX(col, ';', 5), ';', -1)
小提琴是here。此查询仅限于5列,您可以根据需要添加更多列。