从逗号分隔的字符串中提取字符串的SQL查询



我想使用VBA将数据从MS Access数据库提取到MS Excel。

我知道要提取的代码,但在操作列时遇到了问题。

我想提取第一个逗号之前的字符串,然后提取第二个逗号和第三个逗号之后的字符串,再提取第三个逗点之后的字符串。

举个例子。假设我有一个专栏叫水果,它的数据是

Banana,Apple,Orange,Grapes

我想创建四列,第一列是香蕉,第二列是苹果,第三列是橘子,第四列是葡萄。

以下是我为第一栏所做的尝试。

SQL = "SELECT SUBSTRING(Fruits,0,CHARINDEX(',',Fruits) as column1 from tablename"

试试这个:

DECLARE @Data NVARCHAR(MAX) = 'Banana,Apple,Orange,Grapes'
DECLARE @DataXML XML = '<a>' + REPLACE('Banana,Apple,Orange,Grapes', ',', '</a><a>') + '</a>'
SELECT *
FROM
(
SELECT T.c.value('.','varchar(255)')
,ROW_NUMBER() OVER (ORDER BY T.c)
FROM @DataXML.nodes('/a') T(c)
) DS ([value], [col])
PIVOT
(
MAX([value]) FOR [col] IN ([1], [2], [3], [4])
) PVT

SELECT 'Banana,Apple,Orange,Grapes'
AS [my_column]
INTO [my_table]

WITH DataSource (DataXML) AS
(
SELECT CAST('<a>' + REPLACE([my_column], ',', '</a><a>') + '</a>' AS XML)
FROM [my_table] 
)
SELECT *
FROM
(
SELECT T.c.value('.','varchar(255)')
,ROW_NUMBER() OVER (ORDER BY T.c)
FROM DataSource
CROSS APPLY [DataXML].nodes('/a') T(c)
) DS ([value], [col])
PIVOT
(
MAX([value]) FOR [col] IN ([1], [2], [3], [4])
) PVT

您可以创建一个小助手函数并使用Split:

Public Function GetField( _
ByVal AllFields As String, _
ByVal Index As Integer) _
As String

GetField = Split(AllFields, ",")(Index)

End Function

然后:

SQL = "Select GetField([Fruit], 0) As Fruit From YourTable"

最新更新