0

我正在使用 SQL Server 2008。我正在尝试根据 B 列中的手机号码获取 A 列中的值。手机号码可以采用不同的格式,如下所示:

 1. 44 752 111 1234
 2. 07521111234
 3. 07521111234
 4. 447521111234
 5. 7521111234
 6. 752 111 1234 etc...etc. 

我需要基于手机号码在 A 列中提取数据的语法,但仅使用从 75 开始的 10 位数字作为搜索条件。必须忽略前缀 (44,0) 和中间的空格。

另请注意,在 10 位数字中,我指的是以所有组合开头的数字,我认为只有 7 位保持不变。即它可以是 077 或 075 或 078 或 75 或 78 等等。

你能帮忙吗?谢谢。

4

3 回答 3

1

你可以CHARINDEX用来帮助你解决你的问题,

SELECT  ColA, 
        SUBSTRING(ColA, CHARINDEX('75', ColA), LEN(ColA) - CHARINDEX('75', ColA) + 1)
FROM    TableName

或者

SELECT  ColA, 
        RIGHT(ColA, LEN(ColA) - CHARINDEX('75', ColA) + 1) ColB
FROM    TableName

两个查询的输出,

╔═════════════════╦══════════════╗
║      COLA       ║     COLB     ║
╠═════════════════╬══════════════╣
║ 44 752 111 1234 ║ 752 111 1234 ║
║ 07521111234     ║ 7521111234   ║
║ 07521111234     ║ 7521111234   ║
║ 447521111234    ║ 7521111234   ║
║ 7521111234      ║ 7521111234   ║
║ 752 111 1234    ║ 752 111 1234 ║
╚═════════════════╩══════════════╝
于 2013-05-29T13:25:00.830 回答
0

如果您正在处理固定长度的号码(例如英国手机号码),我发现最好的方法是:

RIGHT(REPLACE([MyColumn],' ',''),10)

SQL小提琴

于 2013-05-29T15:55:13.127 回答
0
DECLARE @Tels AS TABLE (no varchar(20))

INSERT INTO @Tels
VALUES
('44 752 111 1234'),
('07521111234'),
('07521111234'),
('447521111234'),
('7521111234'),
('752 111 1234')

SELECT SUBSTRING(REPLACE(no, ' ', ''), 3, 10) from @Tels where no like '75%'

关于你的第二个问题...

SELECT SUBSTRING(REPLACE(no, ' ', ''), 3, 10) from @Tels where no like '7[0-9]%'
UNION
SELECT SUBSTRING(REPLACE(no, ' ', ''), 4, 10) from @Tels where no like '07[0-9]%'
于 2013-05-29T13:27:43.380 回答