如何在SQL Server中获取以特定字符开头的字符串
我有一个表如何在SQL Server中获取以特定字符开头的字符串,sql,sql-server,Sql,Sql Server,我有一个表ABC,它有一列xyx,其中包含(888)477-8977x110或(888)477-8977 ext 110等值 如何在SQL Server中的x或ext之后获取值 SELECT REPLACE(column,'(888)','') FROM ABC; 或者使用子字符串 SELECT SUBSTRING(column,6,15) FROM ABC; 文件: 也许有点过分了 示例 Declare @YourTable Table ([Phone] varchar(50)) In
ABC
,它有一列xyx
,其中包含(888)477-8977x110
或(888)477-8977 ext 110
等值
如何在SQL Server中的x
或ext
之后获取值
SELECT REPLACE(column,'(888)','') FROM ABC;
或者使用子字符串
SELECT SUBSTRING(column,6,15) FROM ABC;
文件:
也许有点过分了 示例
Declare @YourTable Table ([Phone] varchar(50))
Insert Into @YourTable Values
('(888) 477-8977x110')
,('(888) 477-8977 ext 110')
,('(888) 477-8977 extention 110')
,('(888) 477-8977 e 110')
,('888.477.8977ext110')
,('(888) 477-8977')
Select *
,Ext = ltrim(NullIf(reverse(ltrim(left(reverse(Phone),patindex('%[a-z]%',reverse(Phone)+'a')-1))),Phone))
From @YourTable
返回
Phone Ext
(888) 477-8977x110 110
(888) 477-8977 ext 110 110
(888) 477-8977 extention 110 110
(888) 477-8977 e 110 110
888.477.8977ext110 110
(888) 477-8977 NULL
使用Charindex和子字符串
DECLARE @word VARCHAR(254) = '(888) 477-8977 ext 110'
SELECT IIF(CHARINDEX('ext', @word) > 0, LTRIM(RTRIM(SUBSTRING(@word, 0,
LEN(@word)
- LEN(SUBSTRING(@word,
CHARINDEX('ext',
@word),
LEN(@word)))))), LTRIM(RTRIM(SUBSTRING(@word,
0,
LEN(@word)
- LEN(SUBSTRING(@word,
CHARINDEX('x',
@word),
LEN(@word)))))))
如果您除了
x
或ext
之外什么都没有,您可以走这条路:
DECLARE @tblPhoneNumber TABLE(ID INT IDENTITY, PhoneNumber VARCHAR(100));
INSERT INTO @tblPhoneNumber VALUES
('(888) 477-8977x110')
,('(888) 477-8977 ext 110');
SELECT LTRIM(RTRIM(
CAST(
'<x>' + REPLACE(REPLACE(PhoneNumber,'ext','x'),'x','</x><x>') + '</x>' AS XML
).value('/x[2]','nvarchar(max)')
))
FROM @tblPhoneNumber;
DECLARE@tblPhoneNumber表(ID INT-IDENTITY,PhoneNumber-VARCHAR(100));
插入到@tblPhoneNumber值中
(‘(888)477-8977x110’)
(‘(888)477-8977分机110’);
选择LTRIM(RTRIM(
铸造(
''+REPLACE(将(电话号码、'ext'、'x')、'x'、'')+''替换为XML
).value('/x[2]','nvarchar(max)'
))
来自@tblPhoneNumber;
首先,所有ext
都将是x
,然后所有x
都将作为XML元素使用。.value()
选择第二个元素,这是所需的元素。您当然可以使用子字符串来完成此操作,但您的答案中的代码不会返回x或ext之后的值。我喜欢这种过度使用,它被称为防御:-D