【发布时间】:2016-08-23 04:55:28
【问题描述】:
我在 SQL 中有一个 dbo 表,其中有一列我需要根据分隔符 (,) 将其拆分为多个列。实现这一点的代码在这个问题的末尾。该代码可以完美地用作查询,但是我想在 MS Access 2010 中导入最终表(因此在拆分之后)。那是它出错了,因为我找不到带有 ODBC 或查询文件的表。此外,由于“声明”功能,我无法将此代码放在视图函数中。代码来自(它还显示了我想用我的代码做什么): https://raresql.com/2015/08/22/sql-server-how-to-split-one-column-into-multiple-columns/
你能帮我解决这个问题吗?
要将 1 列拆分为多列,请使用以下代码:
DECLARE @delimiter VARCHAR(50)
SET @delimiter=', '
;WITH CTE AS
(
SELECT [Tour number],
[TISLOT Time slot begin],
[TISLOT Delivery day],
[Gate],
CAST('<M>' + REPLACE([Gate], @delimiter , '</M><M>') + '</M>' AS XML) AS [Gate XML]
FROM dbo.TISLOT
)
SELECT [Tour number],
[TISLOT Time slot begin],
[TISLOT Delivery day],
[Gate],
[Gate XML].value('/M[1]', 'varchar(50)') As [Gate1],
[Gate XML].value('/M[2]', 'varchar(50)') As [Gate2],
[Gate XML].value('/M[3]', 'varchar(50)') As [Gate3],
[Gate XML].value('/M[4]', 'varchar(50)') As [Gate4],
[Gate XML].value('/M[5]', 'varchar(50)') As [Gate5],
[Gate XML].value('/M[6]', 'varchar(50)') As [Gate6],
[Gate XML].value('/M[7]', 'varchar(50)') As [Gate7],
[Gate XML].value('/M[8]', 'varchar(50)') As [Gate8],
[Gate XML].value('/M[9]', 'varchar(50)') As [Gate9],
[Gate XML].value('/M[10]', 'varchar(50)') As [Gate10]
FROM CTE
GO
提前谢谢你
【问题讨论】:
-
为什么不排除声明并使用 Replace([Gate], ', ', '')。您没有变量,可以创建视图。
标签: sql sql-server ms-access split