查询以获取员工的所有姓名,他们的名字中包含“A”作为中间人物

时间:2011-07-21 18:47:03

标签: sql oracle substr

例如: - BRAKE,CRANE等。

在我的员工表中,我有ENAME,ENO,JOB,SALARY

在这里,我想提取那些名字中有'A'作为中心字符的enames。

如果ename的长度是奇数,那么中心一,所以我需要在ename中检测奇数和偶数位置。

所以,我尝试了这个,但是坚持了下来,所以我期待从这里获得帮助吗?

SELECT ENAME
FROM EMPLOYEES
WHERE A IN
(SELECT ENAME,
       SUBSTR(ENAME,LENGTH(ENAME)/2+1,1)
FROM EMPLOYEES)
;

6 个答案:

答案 0 :(得分:3)

这适用于奇数长度的字符串,我认为这是你想要的。下次请不要使用这样的帽子。我只花了5分钟阅读你的帖子。

SELECT `ENAME` FROM  `EMPLOYEES` WHERE SUBSTR(`ENAME`, LENGTH(`ENAME`)/2+1, 1) =  'A'

答案 1 :(得分:1)

首先检查名称中是否有奇数字母,然后进行检查。

第二部分检查偶数编号长度的中间两个字母,看是否是A。

这是SQL Server语法,但我认为Oracle应该是类似的。

SELECT ENAME
FROM EMPLOYEES
WHERE ((LEN(ENAME) %2) = 1
AND SUBSTRING(ENAME, LEN(Ename)/2+1, 1) = 'A')
OR
((LEN(ENAME) %2) = 0
AND SUBSTRING(ENAME, LEN(ENAME)/2-1, 2) LIKE '%A%')

答案 2 :(得分:1)

SELECT ename
  FROM employees
WHERE
INSTR(
CASE
  WHEN MOD(LENGTH(ename),2) = 0 THEN SUBSTR( ename, LENGTH(ename)/2, 2 )
  ELSE SUBSTR( ename, (1+LENGTH(ename)/2), 1 )
END,
'A'
) > 0

答案 3 :(得分:0)

我认为这就是你的意思:

SELECT ENAME FROM EMPLOYEES where ENAME=SUBSTR(ENAME,LENGTH((ENAME+1)/2),1)

您使用的是什么数据库服务? (例如,在MS SQL服务器中,您必须使用Len)

答案 4 :(得分:0)

你甚至可以尝试这个:

select ename from emp where substr(ename,ceil((length(ename))/2),1)='A';

这适用于偶数和奇数长度的字符串...希望它有所帮助。

答案 5 :(得分:0)

SELECT ename FROM employees
WHERE instr(ename, 'A', 1, 1) = round(length(ename) / 2);