2016-02-03 14 views
1

我在我們的SQL Server數據庫中有一個字段,基本上兩個字段連接在一起。它有一個描述符和一個數字。我想用數字構建一個視圖,以便將其與其他表相關聯。該數字實際上是作爲其他表上的nvarchar鍵入的。所以從這樣的數據我想查詢只數部分:如何解除字段連接

ProgramField與價值觀:

tst_desc:1 
tst_desc:124 
tst_desc:1495 
tst_desc:20483 

所以我想我的查詢返回的結果:

ProgramNumField

1 
124 
1495 
20483 

該數字的長度隨着時間的推移而變化,並且需要是nvarchar,因此我可以將它與數據庫中的其他表關聯起來。

enter image description here

+1

你試過了什麼嗎? – Lamak

+1

也許你應該首先修復這個模式,以便它*不違反1NF - 一個字段應該只包含一個值。無論如何,你所要求的是分割一個字符串。在這種情況下,您可以簡單地從分號索引中抓取字符到字符串末尾 –

+0

結果必須是正確的?!有多寬? – HABO

回答

7

如果你的前綴始終是tst_desc:那麼你可以簡單地用replace剝離其關閉:

select 
    replace(ProgramField, 'tst_desc:', '') as ProgramNum 
from yourTable 

如果前綴可以是不同的,但總是用冒號價值分離的,可以使用類似:

select 
    right(ProgramField, len(ProgramField) - charindex(':', ProgramField)) as ProgramNum 
from yourTable 
+1

我假設'tst_desc'是測試描述的簡稱,當使用真實數據時可能會有不同的值 –

+0

完美!謝謝。 – Joe

1

@Andy答案是正確的,你仍然可以檢查這個答案。

Declare @t table(data varchar(50)) 
insert into @t values ('tst_desc:1'), ('tst_desc:2'), ('tst_desc:124'), ('tst_desc:1495'), ('tst_desc:20483') 

select 
    Right(data, charindex (':',reverse(data))-1) 
from @t 
5
使用STUFF

SELECT STUFF(ProgramField, 1, charindex(':', ProgramField), '') 
FROM yourtable 

如果你有一些行或結腸缺少一個以上的結腸癌髒數據,您可以從右邊搜索到左的第一個非數字字符

最簡單的方法,你可以使用這種方法,這可以處理各種有趣的數據:

SELECT 
    STUFF(RIGHT('@'+ProgramField, PATINDEX('%[^0-9]%',REVERSE(ProgramField)+'@')),1,1,'') 
+0

爲什麼這比「替換」解決方案「更容易」? – Lamak

+0

@Lamak在Andy的回答下閱讀我的評論 –