0

假设我有一个名为“Note”的自由文本字段,其中包含“ABC:5/52, *back, orders received”

如何提取“5/52”和“返回”并将它们放在两个单独的列中?

这就是我想要实现的目标

QUERY:-

SELECT *,  SUBSTRING(Note, CHARINDEX(':', Note)+1, 4) as ABC, 
SUBSTRING(Note, CHARINDEX('*', Note)+1, 4) as Ret_Stat
, CHARINDEX(':', Note) AS [Colon Index]

FROM [AdventureWorks2012].[Sales].[Comments]

RESULT:-
Note                                           ABC      Ret_Stat
ABC:3/52,  To give more explanation, *back     3/52      back
ABC:3wks,  To debrief, *back, r/v              3wks      back
ABC:13/09/16, see cm,  *back, new referral     13/0      back

我的问题是我想提取 3/52、3wks 和 13/09/16,但我的最终结果只有 13/10。我想问一下如何实现这一点?因为提取的条件可能在 ABC: 后面 4 到 8 个字符不等,并且表包含数千行数据

需要建议。谢谢你。

4

1 回答 1

0

这是您要执行的操作的示例。您可能需要稍微修改一下,因为我没有很多示例数据可以继续。

测试数据

IF OBJECT_ID('tempdb..#TempData') IS NOT NULL DROP TABLE #TempData
GO
CREATE TABLE #TempData (Notes varchar(100))
INSERT INTO #TempData (Notes)
VALUES
 ('This is the first "ABC:5/52 string *back, orders received')
,('*back, orders receivedThis"ABC:5/52 string is the second one')
,('You guessed it, this *back, orders received is the third "ABC:5/52 string')

询问

SELECT
 CHARINDEX('*',Notes) AsteriskLocation
,SUBSTRING(Notes,CHARINDEX('*',Notes)+1,4) AfterAsterisk
,CHARINDEX(':',Notes) ColonLocation
,SUBSTRING(Notes,CHARINDEX(':',Notes)+1,4) AfterColon
FROM #TempData

结果

AsteriskLocation    AfterAsterisk   ColonLocation   AfterColon
36                  back            23              5/52
1                   back            31              5/52
22                  back            62              5/52

我已经分别留下了这些位置,以便您可以看到它们在查询中的使用方式。您也可以使用相同的方法搜索字符串。

于 2016-07-02T20:39:59.160 回答