查询数据库中某一字段中的值全部相同的数据

比如有表A,其中有3个字段NAME,NUM,TEL
NAME NUM TEL
张三 01 11111111
李四 02 22222233
王五 03 44444444
要查询表A中TEL字段值全部相同的所有数据
结果应该是
张三 01 11111111
王五 03 44444444
这种SQL怎么写

CREATE TABLE #test(
  NAME   varchar(10),
  NUM    varchar(10),
  TEL    varchar(10)
);

INSERT INTO #test VALUES('张三', '01', '11111111');
INSERT INTO #test VALUES('李四', '02', '22222233');
INSERT INTO #test VALUES('王五', '03', '44444444');


SELECT
  *
FROM
  #test  t
WHERE
  REPLICATE( LEFT(TEL, 1),  LEN(TEL)) = TEL;
  

查询结果:
NAME       NUM        TEL
---------- ---------- ----------
张三         01         11111111
王五         03         44444444

(2 行受影响)



注:

LEFT(TEL, 1) 意思是 获取 TEL 的左边的第一个字母.

LEN(TEL)  是获取 TEL 字符串的长度.

REPLICATE( LEFT(TEL, 1),  LEN(TEL))  是重复 TEL 的左边的第一个字母. 长度为TEL 字符串的长度.


REPLICATE( LEFT(TEL, 1),  LEN(TEL)) = TEL  就是用第一个字符,重复了 TEL 的长度以后, 和 TEL 一样, 说明这个 TEL 全部只使用了一个字符。



SQL Server  2008 Express 下测试通过。

追问

oracle中无法使用REPLICATE函数

追答SQL> SELECT
  2    *
  3  FROM
  4    test  t
  5  WHERE
  6    TRIM(LPAD(' ',  LENGTH(TEL)+1, SUBSTR(TEL, 1, 1))) = TEL;

NAME                 NUM                  TEL
-------------------- -------------------- --------------------
张三                 01                   11111111
王五                 03                   44444444

温馨提示:答案为网友推荐,仅供参考
第1个回答  2013-07-22
select NAME,NUM,TEL
from A
a where REGEXP_LIKE(a.TEL,'^[0-9]*$') ;

看你用什么数据库 在Oracle里 你可以写正则表达式

刚才查了一下 在mysql 和 sql server 也支持
第2个回答  2013-07-22
没有看懂,李四 怎么就字段相同了?

sqlserver
select * from a
where tel not like '%'+left(tel,1)+'%'

oracle
select * from a
where tel not like '%' || substr(tel,1,1) || '%'
第3个回答  2020-08-07
你的例子就写得不对吧,你三组数据里,哪里有 TEL 字段相同的~!??