我想进行一个查询,显示姓氏的首字母大写,最后一个字母大写。示例:查询后的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数据库谁能给我解释一下问题出在哪里?
cnh2zyt31#
问题 是 连接 字符 。 但是 , 我 想 建议 一 种 稍微 不同 的 方法 :
select (upper(substr(last_name, 1, 1)) || substr(last_name, 2, len(last_name) - 2) || upper(substr(last_name, -1, 1)) )
中 的 每 一 个换 句 话说 , 要 避免 initcap() 。 问题 是 会 产生 意 想不到 的 副 作用 。 initcap() 会 将 字符 串 中 每个 单词 的 首 字母 大写 。 因此 , 如果 名称 由 多 个 单词 组成 , 那么 每个 单词 都 将 大写 。 在 这种 情况 下 , 我 认为 假设 姓氏 只 由 一 个 名称 组成 是 不 明智 的 。
initcap()
5jdjgkvh2#
为了连接字符串,您使用了“+”,这是考虑到您的字符串是数字,这不是情况,你得到这个错误。要在Oracle中连接字符串,请使用||运算子或CONCAT()函数。因此,您的查询将变为:
select initcap(last_name) || LOWER(SUBSTR(last_name,2,LENGTH(last_name))) name_last from employees;
现在,您可以修改它以获得您所期望的输出。
2条答案
按热度按时间cnh2zyt31#
问题 是 连接 字符 。 但是 , 我 想 建议 一 种 稍微 不同 的 方法 :
中 的 每 一 个
换 句 话说 , 要 避免
initcap()
。 问题 是 会 产生 意 想不到 的 副 作用 。initcap()
会 将 字符 串 中 每个 单词 的 首 字母 大写 。 因此 , 如果 名称 由 多 个 单词 组成 , 那么 每个 单词 都 将 大写 。 在 这种 情况 下 , 我 认为 假设 姓氏 只 由 一 个 名称 组成 是 不 明智 的 。5jdjgkvh2#
为了连接字符串,您使用了“+”,这是考虑到您的字符串是数字,这不是情况,你得到这个错误。
要在Oracle中连接字符串,请使用||运算子或CONCAT()函数。
因此,您的查询将变为:
现在,您可以修改它以获得您所期望的输出。