跳转至

1667. 修复表中的名字

难度简单

题目描述

表: Users

+----------------+---------+
| Column Name    | Type    |
+----------------+---------+
| user_id        | int     |
| name           | varchar |
+----------------+---------+
user_id 是该表的主键(具有唯一值的列)。
该表包含用户的 ID 和名字。名字仅由小写和大写字符组成。

 

编写解决方案,修复名字,使得只有第一个字符是大写的,其余都是小写的。

返回按 user_id 排序的结果表。

返回结果格式示例如下。

 

示例 1:

输入:
Users table:
+---------+-------+
| user_id | name  |
+---------+-------+
| 1       | aLice |
| 2       | bOB   |
+---------+-------+
输出:
+---------+-------+
| user_id | name  |
+---------+-------+
| 1       | Alice |
| 2       | Bob   |
+---------+-------+

解法

方法一

思考

姓名需首字母大写、其余小写。用 \(\texttt{UPPER}(\texttt{LEFT}(name,1))\)\(\texttt{LOWER}(\texttt{SUBSTRING}(name,2))\) 拼接,再按 \(\texttt{user\_id}\) 排序。

1
2
3
4
5
6
7
SELECT
    user_id,
    CONCAT(UPPER(LEFT(name, 1)), LOWER(SUBSTRING(name, 2))) AS name
FROM
    users
ORDER BY
    user_id;

方法二

思考

方法一的 \(\texttt{SUBSTRING}(name,2)\) 取到串尾。某些引擎可用 \(\texttt{SUBSTRING}(name,2,\texttt{DATALENGTH}(name))\) 显式给出长度,结果相同。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
SELECT
    user_id,
    CONCAT(
        UPPER(LEFT(name, 1)),
        LOWER(SUBSTRING(name, 2, DATALENGTH(name)))
    ) AS name
FROM
    users
ORDER BY
    user_id;

评论