2017-07-31 73 views
1

我只需要返回給定字段中的一部分值。從字段查詢部分值 - SQL SERVER 2008

實施例:

一個給定的字段返回像「AB-1X3.4567」,但所希望的值是隻有「1X3.4567'portion。因此,對於這個例子,我需要刪除任何之前的

[0-9,A-Z][0-9,A-Z][0-9,A-Z][.][0-9,A-Z][0-9,A-Z][0-9,A-Z][0-9,A-Z]. 

我能寫什麼查詢做到這一點的格局?

回答

3

create table t (val varchar(32)) 
insert into t values 
('AB-1X3.4567') -- given example 
,('1X3.4567AB-1X3.4567') --extra junk on the end 
,('1X3.4567')  -- goldy locks 
,('X3.4567')  -- too short 
,('AB-1X#.4567') -- # is not [0-9A-Z] 

select 
    val 
    , str = stuff(val,1,patindex('%[0-9A-Z][0-9A-Z][0-9A-Z][.][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z]%',val)-1,'') 
from t 

rextester演示:http://rextester.com/ITUJ68634

回報:

+---------------------+---------------------+ 
|   val   |   str   | 
+---------------------+---------------------+ 
| AB-1X3.4567   | 1X3.4567   | 
| 1X3.4567AB-1X3.4567 | 1X3.4567AB-1X3.4567 | 
| 1X3.4567   | 1X3.4567   | 
| X3.4567    | NULL    | 
| AB-1X#.4567   | NULL    | 
+---------------------+---------------------+ 
+1

比我更動態的解決方案。在您發佈之前,我正在處理這個問題--1個來自我。 – scsimon

+0

感謝你們兩位,這兩個答案都很有幫助。問題解決了! –

+0

@RussellAlan樂於助人! – SqlZim

1

你的模式暗指任何是XXX.XXXX其中X =任何單個數字或字母。在這種情況下,我們可以使用stuff()patindex()使用RIGHT()LEN()

DECLARE @value VARCHAR(4000)='AB-1X3.4567' 

SELECT RIGHT(@value,LEN(@value) - 3)