我只需要返回給定字段中的一部分值。從字段查詢部分值 - 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].
我能寫什麼查詢做到這一點的格局?
我只需要返回給定字段中的一部分值。從字段查詢部分值 - 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].
我能寫什麼查詢做到這一點的格局?
:
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 |
+---------------------+---------------------+
你的模式暗指任何是XXX.XXXX其中X =任何單個數字或字母。在這種情況下,我們可以使用stuff()
和patindex()
使用RIGHT()
和LEN()
DECLARE @value VARCHAR(4000)='AB-1X3.4567'
SELECT RIGHT(@value,LEN(@value) - 3)
比我更動態的解決方案。在您發佈之前,我正在處理這個問題--1個來自我。 – scsimon
感謝你們兩位,這兩個答案都很有幫助。問題解決了! –
@RussellAlan樂於助人! – SqlZim