【发布时间】:2014-11-06 19:47:11
【问题描述】:
我正在尝试提取###x###、###x##,有时还有#x#。有时数字和 x 之间可能有一个空格。本质上,我可能会遇到像
- 720x60
- 720x600
- 720 x 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 中需要这个......使用正则表达式和另一种语言超出了我的项目范围。
标签: sql regex sql-server-2012 substring