1

例如:- 制动器、起重机等。

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

在这里,我想提取那些名字中以“A”为中心字符的名字。

如果 ename 的长度是奇数,则居中,所以我需要检测 ename 中的奇数和偶数位置。

所以,我尝试了这个,但坚持了下来,所以我可以期待这里的帮助吗?

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

6 回答 6

3

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

SELECT `ENAME` FROM  `EMPLOYEES` WHERE SUBSTR(`ENAME`, LENGTH(`ENAME`)/2+1, 1) =  'A'
于 2011-07-21T18:55:53.297 回答
1

这首先检查名称中是否包含奇数个字母,然后进行检查。

第二部分检查中间 2 个字母的偶数长度,看是否是 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%')
于 2011-07-21T18:57:37.957 回答
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
于 2011-07-21T19:04:20.133 回答
0

我想这就是你的意思:

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

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

于 2011-07-21T18:58:00.203 回答
0

你甚至可以试试这个:

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

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

于 2013-07-03T18:59:42.973 回答
0
SELECT ename FROM employees
WHERE instr(ename, 'A', 1, 1) = round(length(ename) / 2);
于 2020-07-27T07:21:29.417 回答