我只需要返回给定字段中值的一部分。
例:
给定字段返回类似于"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)