如何在SQL Server中的特定字符后启动字符串

时间:2018-01-11 19:41:59

标签: sql sql-server

我的表格ABC的列xyx包含(888) 477-8977x110(888) 477-8977 ext 110等值。

如何在SQL Server

中的xext之后获取值

4 个答案:

答案 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)

如果您还有xext,那么您可以走这条路:

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()选择第二个元素,这是必需的元素。