【问题标题】:SQL Server: String ManipulationSQL Server:字符串操作
【发布时间】:2018-04-10 10:58:42
【问题描述】:

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

'%[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]%'
(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]%'
(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]

【问题讨论】:

标签: sql-server string data-manipulation


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 2023-04-06
    • 2010-09-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-08-08
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多