2017-07-06 25 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