3
我试图提取###x###
,###x##
,有时候还有#x#
。有时数字和x之间可能有空格。从本质上讲,我可能会碰到琴弦等使用SQL PATINDEX提取字符串,不同大小的子字符串
- 720x60
- 720x600
- 720×60
- 720_x_60
- 的1x1
我使用PATINDEX()
找到图案的第一次出现'%[0-9]%x%[0-9]%'
。到现在为止还挺好。然后我使用PATINDEX()
找到之后的第一个非数字字符串。这是我遇到麻烦的地方。我得到了截图中的结果。代码也在下面。
SELECT *
,CASE WHEN StartInt > 0
THEN SUBSTRING(Placement, StartInt, SizeLength) ELSE NULL END AS PlacementSize
FROM
(SELECT Placement
--find the first occurrence of #*x*#
,PATINDEX('%[0-9]%x%[0-9]%',Placement) AS StartInt
--find the first non-digit after that
,PATINDEX(
'%[^0-9]%'
,RIGHT(
Placement + '_' --this underscore adds at least one non-digit to find
,LEN(Placement)
-
PATINDEX('%[0-9]%x%[0-9]%',Placement) - 5
)
) + 6 AS SizeLength
FROM [Staging].[Client].[A01_FY14_Reporting_staging]
WHERE [Date] > '2014-07-01') AS a
结果:
@Max当然。我需要在T-SQL中使用这个...使用正则表达式和其他语言超出了我的项目范围。 – Kyle 2014-09-12 15:53:42