从字段查询部分值 - SQL SERVER 2008



我只需要返回给定字段中值的一部分。

例:

给定字段返回类似于"AB-1X3.4567">

的内容,但所需的值仅为"1X3.4567"部分。 因此,对于此示例,我需要删除

[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].

我可以写什么查询来执行此操作?

使用stuff()patindex()

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 = 任何单个数字或字母。在这种情况下,我们可以使用RIGHT()LEN()

DECLARE @value VARCHAR(4000)='AB-1X3.4567'
SELECT RIGHT(@value,LEN(@value) - 3)

最新更新