1667. 修复表中的名字

90 阅读2分钟

携手创作,共同成长!这是我参与「掘金日新计划 · 8 月更文挑战」的第21天,点击查看活动详情

一、题目

表: Users

+----------------+---------+
| Column Name    | Type    |
+----------------+---------+
| user_id        | int     |
| name           | varchar |
+----------------+---------+

user_id 是该表的主键。 该表包含用户的 ID 和名字。名字仅由小写和大写字符组成。  

编写一个 SQL 查询来修复名字,使得只有第一个字符是大写的,其余都是小写的。

返回按 user_id 排序的结果表。

查询结果格式示例如下。

 

示例 1:

输入: Users table:

+---------+-------+
| user_id | name  |
+---------+-------+
| 1       | aLice |
| 2       | bOB   |
+---------+-------+

输出:

+---------+-------+
| user_id | name  |
+---------+-------+
| 1       | Alice |
| 2       | Bob   |
+---------+-------+

来源:力扣(LeetCode)

链接:leetcode.cn/problems/fi…

著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

二、解题思路

创建数据表

根据题意创建数据表,设置数据类型

CREATE TABLE Users(
	user_id INT PRIMARY KEY,
	NAME VARCHAR(20)
);
INSERT INTO Users VALUES
(1,"aLice"),
(2,"bOB");
  • 显示数据表

image.png

使用的函数

根据题意只有第一个字符是大写的,其余都是小写的。这里需要使用几个函数

/*

concat(str1, str2,....)
功能:将多个字符串连接成一个字符串
返回结果为连接参数产生的字符串,如果有任何一个参数为null,则返回值为null。

UPPER()
功能:将字符串中所有的字母字符转换为大写

LOWER()
功能:将字符串中所有的字母字符转换为小写

LEFT()
是一个字符串函数
返回具有指定长度的字符串的左边部分。
接受两个参数:Str和length 
str: 一个字符串
length: 想要截取的长度,是一个正整数。

SUBSTR()
返回需要截取的字符串
接受两个参数,Str和开始位置

*/
SELECT CONCAT(user_id, NAME) AS str FROM Users;

SELECT UPPER(NAME) NAME FROM Users;
SELECT LOWER(NAME) NAME FROM Users;
SELECT LEFT(NAME,1) NAME FROM Users;
SELECT SUBSTR(NAME,2) AS NAME FROM Users;

思路

  • 截取name值的第一位LEFT(NAME,1)
  • 截取name值的第二位及后面的值SUBSTR(NAME,2)
  • 设置name第一位值为大写参数UPPER(LEFT(NAME,1))
  • 设置name第一位后边的值均为小写LOWER(SUBSTR(NAME,2))
  • 将name的大写和小写拼接到一起CONCAT(UPPER(LEFT(NAME,1)), LOWER(SUBSTR(NAME,2)))
  • 返回按 user_id 排序的结果表,所以ORDER BY user_id;

具体执行语句

SELECT
    user_id,
    CONCAT(UPPER(LEFT(NAME,1)),LOWER(SUBSTR(NAME,2))) AS NAME
FROM 
    Users
ORDER BY user_id;

三、执行结果

结果显示

image.png

四、总结

从这道题上学习到了concat()、UPPER()、LOWER()、LEFT()、SUBSTR()的使用,对于初学者来讲帮助很大。