我的问题是:我有一个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
等等,但这不是专业而且非常慢。
我怎么能用迭代或其他方式解决它?
谢谢。
答案 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列......