Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/oracle/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
SQL将名称的第一个字母和最后一个字母大写_Sql_Oracle - Fatal编程技术网

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

SQL将名称的第一个字母和最后一个字母大写,sql,oracle,Sql,Oracle,我想做一个查询,显示我的姓,首字母大写,最后一个字母大写 示例:姓class='Alexander' 查询后:姓氏class='AlexandeR' 我试过这样做 select initcap(last_name)+LOWER(SUBSTR(last_name,2,LENGTH(last_name))) name_last from employees 但我得到这个错误01722。00000-“无效号码” 我正在使用SQL Oracle数据库 有人能解释一下问题出在哪里吗?要连接您正在使用的字

我想做一个查询,显示我的姓,首字母大写,最后一个字母大写

示例:姓class='Alexander' 查询后:姓氏class='AlexandeR'

我试过这样做

select initcap(last_name)+LOWER(SUBSTR(last_name,2,LENGTH(last_name))) name_last from employees
但我得到这个错误01722。00000-“无效号码”

我正在使用SQL Oracle数据库


有人能解释一下问题出在哪里吗?

要连接您正在使用的字符串“+”,它考虑到您的字符串是数字,但事实并非如此,您会遇到此错误

要在Oracle中连接字符串,请使用| |运算符或CONCAT()函数

因此,您的查询变成:

select initcap(last_name) || LOWER(SUBSTR(last_name,2,LENGTH(last_name))) name_last from employees;

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

问题在于连接字符。但是,我想建议一种稍微不同的方法:

select (upper(substr(last_name, 1, 1)) ||
        substr(last_name, 2, len(last_name) - 2) ||
        upper(substr(last_name, -1, 1))
       )

换句话说,避免
initcap()
。问题在于意外的副作用
initcap()
将字符串中每个单词的第一个字母大写。因此,如果名称由多个单词组成,那么每个单词都将大写。在这种情况下,我认为假设姓氏只包含一个名称是不明智的。

在Oracle中使用
|
进行字符串连接,而不是
+
选择initcap(反向(反向(姓氏)))
如果你觉得自己很傻:-)我怎么能把最后一个字母大写?@Jeroen-外部initcap会覆盖内部initcap所做的更改,因此你仍然只会把第一个字母大写。不错的尝试*8-)啊哈:(羞耻:染料,它工作得很好,谢谢你,但是你必须使用长度来代替sql中的LEN,你能告诉我,我如何写一个浮点数,比如佣金,在右边加零填充例如:佣金pct=0.5查询后,佣金pct=0.50000000?我发现它被解码(佣金pct,NULL,'NO commission',to_CHAR(rpad(委员会,9,'0'))通信