SQL大写名称的第一个和最后一个字母

时间:2016-04-12 11:23:09

标签: sql oracle

我想创建一个查询,显示我的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

有人可以解释一下我的问题是什么吗?

2 个答案:

答案 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;

现在您可以修改它以获得您期望的输出。