我们说我有一个名为' Note'的自由文字字段。并包含" ABC:5/52,*返回,已收到订单"
如何提取' 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个字符变化:并且该表包含数千行数据
需要建议。谢谢你。
答案 0 :(得分: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
我已单独离开这些位置,以便您可以查看它们在查询中的使用方式。您也可以使用相同的方法搜索字符串。