SQL Server:字符串操作



我目前设法从一些描述中提取出一个代码列表,其中所有代码都应该以类似的格式进行格式化,例如:

'%[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]%'(00000-0000)'%[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]%

'(0000-0000)

'
%[0-9][0-9][0-9][0-9] [0-9][0-9]-[0-9][0-9][0-9]%'(00000-000)'%[0-9][0-9][0-9][0-9][0-9][0-9][0-9]%'(0000-000)'%[0-9][0-9][0-9][0-9][0-9][0-9][0-9]%'
(

0000-00)


我注意到我目前尚未提取的代码格式为 00000000,并且想知道是否有办法将它们重组为 00000-000 来提取这些代码?

我目前使用的代码是基于昨天 Larnu 的建议,如果有人可以帮助解决这个字符串操作问题,将不胜感激,如果可能的话,我想将重组的字符串与其他字符串一起放在列中正确的格式。

WITH VTE AS (
SELECT *
FROM [Remedies].[dbo].[ShortageCompany] V)
SELECT  
V.[ShortageDetailID]
,V.[ShortageID]
,V.[Company]
,V.[CompanyID]
,V.[Presentation]
,V.[Availability]
,V.[Information]
,V.[Reason]
,V.[StandardReason],
CASE WHEN PI1.C > 0 THEN SUBSTRING(V.[Presentation],PI1.C, 10)
WHEN PI2.C > 0 THEN SUBSTRING(V.[Presentation],PI2.C, 9)
WHEN PI3.C > 0 THEN SUBSTRING(V.[Presentation],PI3.C, 9)
WHEN PI4.C > 0 THEN SUBSTRING(V.[Presentation],PI3.C, 8)
WHEN PI5.C > 0 THEN SUBSTRING(V.[Presentation],PI3.C, 7)

ELSE NULL
END AS N
FROM VTE V

CROSS APPLY (VALUES(PATINDEX('%[0-9][0-9][0-9][0-9][0-9]-[0-9][0-9][0-9][0-9]%',V.[Presentation]))) PI1(C)
CROSS APPLY (VALUES(PATINDEX('%[0-9][0-9][0-9][0-9]-[0-9][0-9][0-9][0-9]%',V.[Presentation]))) PI2(C)
CROSS APPLY (VALUES(PATINDEX('%[0-9][0-9][0-9][0-9][0-9]-[0-9][0-9][0-9]%',V.[Presentation]))) PI3(C)
CROSS APPLY (VALUES(PATINDEX('%[0-9][0-9][0-9][0-9]-[0-9][0-9][0-9]%',V.[Presentation]))) PI4(C)
CROSS APPLY (VALUES(PATINDEX('%[0-9][0-9][0-9][0-9]-[0-9][0-9]%',V.[Presentation]))) PI5(C)

ORDER BY [ShortageDetailID]

尽管我说过,但这种方法实际上有效。我运行此查询的数据不一致,代码尽可能匹配值,尽管我不得不扩展搜索以查找更多种类的字符结构。

最新更新