提取REGEXP子串SQL Server

时间:2017-07-06 10:58:15

标签: sql sql-server substring

我想从此查询中提取特定的数字值...

专栏:名称 这个例子有四行:

  • 1/2 Product1 some_description 1200 GR更多数据......(UND)
  • 1/4 Product2 some_description 2400G more data(KG more data)
  • 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长度直到整数值,但我不知道如何解决它。

3 个答案:

答案 0 :(得分:0)

你很亲密。在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;

答案 1 :(得分:0)

CONVERT(
INT, 
(REPLACE(
    SUBSTRING(
        nome,
        (
            PATINDEX(
                '%[0-9]%',
                REPLACE(
                    REPLACE(
                        nome,
                        '1/2',
                        ''
                    ),
                    '1/4',
                    ''
                )
            )
        ),
        4
    ),
    'G',
    ''
))) as pesoTotal

这解决了这个问题,谢谢。

答案 2 :(得分:0)

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