1

我的问题是:我有一个varchar-type 列(ID),其中包含如下字符串记录:“123056; 96445; 123100; 45893; 201971”,我想将它们划分为下一个字段:

 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_1toID_2等的列名,但它不专业而且很慢。

我如何通过迭代或其他方式解决它?

谢谢你。

4

2 回答 2

0

您应该通过规范化数据来解决它。

即:通过在每条记录中拥有许多具有 ID 的行。

ID
123056 
96445 
123100 
45893 
201971

至于如何执行拆分,搜索引擎将提供许多选项来按字符拆分字符串,使用函数或 CTE。

于 2013-09-18T14:03:08.953 回答
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 列...

于 2013-09-18T14:50:49.507 回答