Sql多列检索单个值

时间:2015-01-17 19:37:41

标签: mysql sql-server-2008

id Mobile   Home      Business
1  07707    0161      abcdefg
2  Null   07798567     Null
3  07709  078 iju      Null

您好。我试图找出如何从表中检索手机号码,其中包含一些不良数据。

该数字可以位于所有varchars的列中。 要搜索的号码必须从07开始,且必须是11位数。

到目前为止,我只管理过这个:

select REPLACE ( 
      COALESCE (Business_Phone, Cell_Phone, Home_Phone) Contact_Phone 
               , ' '.'') 
from testtable
where len () =11?

任何建议都将不胜感激。感谢。

2 个答案:

答案 0 :(得分:0)

尝试此查询:

SELECT * FROM (
    SELECT CASE
        WHEN REPLACE(Business_Phone, ' ', '') LIKE '07[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]' THEN REPLACE(Business_Phone, ' ', '')
        WHEN REPLACE(Cell_Phone, ' ', '') LIKE '07[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]' THEN REPLACE(Cell_Phone, ' ', '')
        WHEN REPLACE(Home_Phone, ' ', '') LIKE '07[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]' THEN REPLACE(Home_Phone, ' ', '')
        END AS TrueMobile
    FROM testtable
) x
WHERE x.TrueMobile IS NOT NULL

它试图找到一个包含11位数字的字段(前两个是07),中间有任意数量的空格,没有其他字符。它首先尝试Business_Phone,然后是Cell_Phone,然后是Home_Phone。记录这三个字段都不匹配的记录将从结果集中排除。

答案 1 :(得分:0)

测试数据

DECLARE @TABLE TABLE (id INT, Mobile VARCHAR(20), Home VARCHAR(20),Business VARCHAR(20))
INSERT INTO @TABLE VALUES 
(1,'07707'      ,    '0161'  , 'abcdefg'),
(2,Null         ,  '07798567',     Null),
(3,'07709'      ,  '078 iju' ,  '07709175555'),
(4,'07709178921',  '078 iju' ,     Null)

查询

;WITH CTE AS 
(
    SELECT * 
    FROM @TABLE 
     UNPIVOT (Numbers FOR Num_Types IN (Mobile,Home,Business)) up
)
SELECT *
FROM CTE C1
WHERE NOT EXISTS(SELECT 1 
                 FROM CTE C2
                 WHERE LEFT(C2.Numbers, 2) = '07'
                 AND C2.Numbers NOT LIKE '%[^0-9]%'
                 AND C1.id = C2.id
                 AND C1.Numbers = C2.Numbers
                 AND C1.Num_Types = C2.Num_Types)

结果

╔════╦═════════╦═══════════╗
║ id ║ Numbers ║ Num_Types ║
╠════╬═════════╬═══════════╣
║  1 ║ 0161    ║ Home      ║
║  1 ║ abcdefg ║ Business  ║
║  3 ║ 078 iju ║ Home      ║
║  4 ║ 078 iju ║ Home      ║
╚════╩═════════╩═══════════╝