hak*_*iko 6 sql database oracle plsql oracle10g
我开始学习Oracle PL/SQL,我下载了Oracle Database 10g Express,并提供了相同的示例和问题.
有一个问题我无法解决.
问题是:
写一个SQL查询来检索的第一个名字,姓氏,并在员工的代码被发现如下的每个员工的代码:首先删除字符所有的"我"和"L",那么,连接第一六个字母的名称,一个破折号" - ",以及姓氏的最后六个字符,其中只有代码的第一个和最后一个字符应该是大写的.如果名称不包含六个字母,请将下划线(" ")放在作品的末尾; 如果姓氏不包含六个字母,请将下划线(" ")放在作品的开头.根据姓氏订购列表,然后根据名称.
输出必须是这样的

我写了一些东西,但这完全错了,不清楚.我应该修复哪些部分?
SELECT employees.first_name, employees.last_name,
replace(replace(first_name,'l',''),'i'),
initcap(substr(rpad(employees.first_name,6,'_'),1,6)) || '-' ||
case when length(employees.last_name)>4
then lower(substr(employees.last_name,-5,4))
else lower(substr(lpad(employees.last_name,5,'_'),-5,4)) end ||
upper(substr(employees.last_name,-1,1)) code
FROM employees
ORDER BY last_name, first_name;
Run Code Online (Sandbox Code Playgroud)
这是我的输出(错误)

你可以这样写:
select first_name, last_name, f
||'-'
||substr(l, 1, length(l) - 1)
||upper(substr(l, -1)) code
from (select first_name, last_name,
initcap(rpad(substr(translate(first_name, 'xil', 'x'), 1, 6), 6,
'_')) f,
lpad(substr(translate(last_name, 'xil', 'x'),
greatest(-6, -length(translate(last_name, 'xil', 'x')))), 6,
'_')
l
from employees);
Run Code Online (Sandbox Code Playgroud)
我假设你只想替换iandl而不是Iand L。replace(replace(str, 'l', ''), 'i', '')翻译的行为与本例相同。
| 归档时间: |
|
| 查看次数: |
5465 次 |
| 最近记录: |