2011-04-15 32 views
2

我有一個名爲Foo的表,並且有一個名爲Bar的列,它是一個nvarchar我如何從nvarchar獲得一個數字

欄的值是這樣的:Prefix + Number

例子:

Bar = 'abc123' 
Bar = 'a1bc23' 

我想選擇欄的數字部分(下半年),這將是:

123 if Bar = 'abc123' 
23 if Bar = 'a1bc23' 

假定前綴不以數字結尾,我怎樣才能得到Bar的數字部分?

注:

  • 我們不知道前綴
  • 無論是T-SQL或LINQ解決方案的長度就可以了。

預先感謝您的時間。

回答

1
WITH T(C) 
AS 
(
SELECT 'a1bc23' UNION ALL 
SELECT 'abc123' UNION ALL 
SELECT 'FOO' UNION ALL 
SELECT NULL UNION ALL 
SELECT '456' 
) 
SELECT 
     CASE WHEN C LIKE '%[0-9]' 
      THEN CASE WHEN C LIKE '%[^0-9]%' 
        THEN RIGHT(C,PATINDEX('%[^0-9]%', REVERSE(C))-1) 
        ELSE C 
       END 
     END AS Number 
FROM T 

返回

Number 
------ 
23 
123 
NULL 
NULL 
456 
1

馬丁對如何做一個好答案。雖然我確信這會起作用,但它可能會是一個昂貴的通話,因爲您正在對字符串字段進行一些操作。如果你有1000或數百萬行,這可能不是高性能的。

我可能會建議看看爲什麼你需要這樣做,看看你是否可以用一種更容易處理這種情況的方式來格式化你的數據。將一個字段拆分爲2,並在這些行中包含前綴字段和後綴字段。特別是如果這些是「智能零件編號」或其他方面的內容,則可以通過語法更簡單地進行分組。

相關問題