oracle SQL 将 名称 的 首 字母 和 末 字母 大写

enyaitl3  于 2022-11-22  发布在  Oracle
关注(0)|答案(2)|浏览(130)

我想进行一个查询,显示姓氏的首字母大写,最后一个字母大写。
示例:查询后的last_name ='Alexander':姓氏=' Alexandria R'
我试过这样

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

但是我得到这个错误01722.00000-“无效号码”
我正在使用SQL Oracle数据库
谁能给我解释一下问题出在哪里?

cnh2zyt3

cnh2zyt31#

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

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

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

5jdjgkvh

5jdjgkvh2#

为了连接字符串,您使用了“+”,这是考虑到您的字符串是数字,这不是情况,你得到这个错误。
要在Oracle中连接字符串,请使用||运算子或CONCAT()函数。
因此,您的查询将变为:

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

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

相关问题