2017-07-06 52 views
0

我想提取从该查询具体的数值...提取REGEXP子串的SQL Server

列:命名 四行这个例子:

  • 1/2产品1 some_description 1200 GR更多数据...(UND)
  • 1/4产品2 some_description 2400G更多的数据(KG更多的数据)
  • 产品3 some_description 2200 GRS更多的数据...
  • 1/4产品4 some_desc ription 1800GR more data UND ...

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

的模式是:

  • [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

这种提取物的某些值,而不是在正确的顺序......我想,我可以长到整数值套用左,但我不知道如何解决它。

回答

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

该解决的问题,谢谢。

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; 
+0

这是一个字段,Product1 some_description 1200 GR更多描述... 我只想要整数值。您的查询获取第一个数字...我修改它,但使用其他行,与整数值不匹配。 – dankkomcg

+0

@dankkomcg。 。 。只能回答你提出的问题。在这个问题中,你显然需要前四位数字。如果你有另外一个问题,那就把它作为另一个问题。如果你改变了这个问题,那么你可能会使这个答案失效,并且可能会引起低估。 –

+0

它是相同的,我编辑它,因为它可能是用户不明白。没有前四位数字,只有第一个整数,如果你愿意,形成四位数字。但它也是同样的问题。 – dankkomcg