【问题标题】:Extract REGEXP Substring SQL Server提取 REGEX 子字符串 SQL Server
【发布时间】:2017-12-10 08:24:06
【问题描述】:

我想从这个查询中提取一个特定的数值...

列:名称 此示例为四行:

  • 1/2 Product1 some_description 1200 GR 更多数据...(UND)
  • 1/4 Product2 some_description 2400G 更多数据(KG 更多数据)
  • Product3 some_description 2200 GRS 更多数据...
  • 1/4 Product4 some_description 1800GR 更多数据 UND...

我只想要整数值。我要查询:

  • 1200
  • 2400
  • 2200
  • 1800

模式是:

  • [0-9]{4}G
  • [0-9]{4}GR
  • [0-9]{4} GRS

如何在 SQL 查询中使用此正则表达式来解析属性值?

SELECT FROM myTable SUBSTRING(name, (PATINDEX('%[0-9]%', [name])),4) as peso

这会提取一些值,但顺序不正确...我认为我可以应用 LEFT 长度直到整数值,但我不知道如何解决它。

【问题讨论】:

    标签: sql sql-server substring


    【解决方案1】:

    你很接近。在 SQL Server 中,最简单的数据处理方法是:

    select left(name, 4) as peso
    from mytable t;
    

    也就是说,前四个字符似乎就是你想要的。

    如果前四个字符可能不都是数字,那么你要使用patindex()

    select left(name, patindex('%[^0-9]%', name + ' ') - 1) as peso
    from myTable t;
    

    【讨论】:

    • 这是一个字段,Product1 some_description 1200 GR 更多描述...我只想要整数值。您的查询获得第一个数字...我对其进行了修改,但对于另一行,与整数值不匹配。
    • @dankkomcg 。 . .只能回答您提出的问题。在这个问题中,您显然想要前四位数字。如果您有 另一个 问题,则将其作为 另一个 问题提出。如果您更改此问题,那么您可能会使此答案无效,这可能会导致投票失败。
    • 同理,我编辑它,因为它可能用户不理解。没有前四位数字,只有第一个整数,如果你愿意,形成四位数字。但这是同一个问题。
    • @dankkomcg 。 . .这个答案应该做你想做的。
    【解决方案2】:
    CONVERT(
    INT, 
    (REPLACE(
        SUBSTRING(
            nome,
            (
                PATINDEX(
                    '%[0-9]%',
                    REPLACE(
                        REPLACE(
                            nome,
                            '1/2',
                            ''
                        ),
                        '1/4',
                        ''
                    )
                )
            ),
            4
        ),
        'G',
        ''
    ))) as pesoTotal
    

    这解决了问题,谢谢。

    【讨论】:

      【解决方案3】:

      应该类似于SUBSTRING(name, PATINDEX('%[0-9][0-9][0-9][0-9][G ][GR]%', name),4),如果他们总是使用相同的模式。会得到一些误报('1400 Rhinos'、'3216GGG' 等)。

      【讨论】:

        猜你喜欢
        • 2016-11-24
        • 2023-01-07
        • 2023-03-14
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-05-27
        • 2019-08-06
        • 1970-01-01
        相关资源
        最近更新 更多