我想创建一个查询,显示我的last_name,首字母大写,最后一个大写。
示例:last_name =' Alexander' 在查询之后:last_name =' AlexandeR'
我试过这个
select initcap(last_name)+LOWER(SUBSTR(last_name,2,LENGTH(last_name))) name_last from employees
但是我收到此错误01722. 00000 - "无效的号码"
我正在使用SQL Oracle DB
有人可以解释一下我的问题是什么吗?
答案 0 :(得分:7)
问题是连接字符。但是,我想建议一种稍微不同的方法:
select (upper(substr(last_name, 1, 1)) ||
substr(last_name, 2, len(last_name) - 2) ||
upper(substr(last_name, -1, 1))
)
换句话说,避免initcap()
。问题是意想不到的副作用。 initcap()
将字符串中每个单词的第一个字母大写。因此,如果名称由多个单词组成,则每个单词都将大写。在这种情况下,我不认为假设姓氏只包含一个名称是明智的。
答案 1 :(得分:1)
要连接使用'+'的字符串,考虑到你的字符串是数字而不是这种情况,你就会收到这个错误。
要在Oracle中连接字符串,请使用||运算符或CONCAT()函数。
所以你的查询就像:
select initcap(last_name) || LOWER(SUBSTR(last_name,2,LENGTH(last_name))) name_last from employees;
现在您可以修改它以获得您期望的输出。