我的表格ABC
的列xyx
包含(888) 477-8977x110
或(888) 477-8977 ext 110
等值。
如何在SQL Server
中的x
或ext
之后获取值
答案 0 :(得分:3)
可能有点矫枉过正
示例强>
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
<强>返回强>
{{1}}
答案 1 :(得分:1)
使用此
SELECT REPLACE(column,'(888)','') FROM ABC;
或使用SUBSTRING
SELECT SUBSTRING(column,6,15) FROM ABC;
文档:
https://docs.microsoft.com/en-us/sql/t-sql/functions/substring-transact-sql
答案 2 :(得分:0)
使用Charindex和Substring。
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)))))))
答案 3 :(得分:0)
如果您还有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;
首先,所有ext
都是x
,然后所有x
都将作为XML元素使用。
.value()
选择第二个元素,这是必需的元素。