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

发布于 2024-11-25 15:23:46 字数 343 浏览 4 评论 0原文

例如:- BRAKE、CRANE 等。

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

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

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

所以,我尝试了这个,但卡住了,所以我可以期待这里的帮助吗?

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

E.g:- BRAKE,CRANE etc.

In my employees table , I have ENAME,ENO,JOB,SALARY.

Here, I want to extract out those enames that have an 'A' as the center character in their name.

If length of ename is odd,then center one, so i need to detect odd and even position in ename.

So, I tried this, but stuck up ,so can i expect a help from here?

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

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(6

话少情深 2024-12-02 15:23:46

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

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

This works for odd length strings, which I think is what you wanted. Next time please don't use caps like that. It took me 5 minutes just to read your post.

SELECT `ENAME` FROM  `EMPLOYEES` WHERE SUBSTR(`ENAME`, LENGTH(`ENAME`)/2+1, 1) =  'A'
迷爱 2024-12-02 15:23:46
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
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
伴我心暖 2024-12-02 15:23:46

这首先检查他们的名字中是否有奇数个字母,然后进行检查。

第二部分检查中间 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%')

This checks first that they have an odd number of letters in the name, then does the check.

The second part checks the middle 2 letters for even-numbered lengths to see if either is A.

This is SQL Server syntax but I think Oracle should be similar.

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%')
小嗷兮 2024-12-02 15:23:46

我想这就是你的意思:

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

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

I think this is what you mean:

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

What Database service are you using? (for instance in MS SQL server you must use Len)

塔塔猫 2024-12-02 15:23:46

您甚至可以尝试这个:

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

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

You may even try this one:

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

This will work for both even and odd length strings...hope it helped.

静待花开 2024-12-02 15:23:46
SELECT ename FROM employees
WHERE instr(ename, 'A', 1, 1) = round(length(ename) / 2);
SELECT ename FROM employees
WHERE instr(ename, 'A', 1, 1) = round(length(ename) / 2);
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文