通过迭代子串到很多字段中

时间:2013-09-18 13:56:36

标签: sql sql-server

我的问题是:我有一个varchar - 类型列(ID),其字符串记录如下:“123056; 96445; 123100; 45893; 201971”,我想将它们分成下一个字段:< / p>

 ID_1   | ID_2  | ID_3   | ID_4  | ID_5
 123056 | 96445 | 123100 | 45893 | 201971

实际上,我使用了这段代码:

update MyTable  
set ID_1 = IDs

然后:

update MYTable  
set ID_2 =    
SUBSTRING(ID_1, CHARINDEX (';', ID_1)+2, LEN(ID_1))    
where ID_1 like '%;%'

update MYTable   
set FRS_ID_1 =  
SUBSTRING(FRS_ID_1, 1, CHARINDEX (';', FRS_ID_1)-1)  
where ID_1 like '%;%' 

ID_1 like '%;%'是必需的,因为某些字段只包含一个不是列表的数字。所以我运行了这个代码五次,手动将列名从ID_1更新为ID_2等等,但这不是专业而且非常慢。

我怎么能用迭代或其他方式解决它?

谢谢。

2 个答案:

答案 0 :(得分:0)

您应该通过规范化数据来解决这个问题。

ie:通过在每条记录中包含许多具有ID的行。

ID
123056 
96445 
123100 
45893 
201971

至于如何执行拆分,搜索引擎将使用函数或CTE为角色提供split a string的众多选项。

答案 1 :(得分:0)

将这些值拆分为临时表或表变量作为行。

那里有很多分割函数样本......允许你的输出是这样的:

ID
-------
123056
-------
96445
-------
ETC.

然后您可以执行以下查询:

Select 
     Min(Case rowid When 1 Then item End) id_1,
     Min(Case rowid When 2 Then item End) id_2,
     Min(Case rowid When 3 Then item End) id_3,
     Min(Case rowid When 4 Then item End) id_4,
     Min(Case rowid When 5 Then item End) id_5
INTO #TEMP_TABLE_WITH_COLUMNS
From #temp_table_with_IDs

当然,假设您事先知道您将拥有5列......