例如: - 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)
;
答案 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);