题目链接:https://leetcode.cn/problems/fix-names-in-a-table/
SQL架构
Create table If Not Exists Users (user_id int, name varchar(40))
Truncate table Users
insert into Users (user_id, name) values ('1', 'aLice')
insert into Users (user_id, name) values ('2', 'bOB')
表: 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 |
+---------+-------+
个人感觉正常情况下应该通过后台处理,而不是直接sql处理,sql处理会好一点吗?其实我也不太清楚。concat这个方法连接字符串的,substring用来切割字符串的,upper大写用的,lower小写用的。把第一个位置取出来大写,后面的位置取出来小写在拼接结果。
select user_id , concat(UPPER(SUBSTRING(name,1,1)) , LOWER(SUBSTRING(name,2,LENGTH(name)-1))) name
from Users
order by user_id
另一个方法使用的是substr和left方法的,substr也是切割,left是左边开始切割,详情看拓展里面
select
user_id,
concat(upper(left(name,1)),lower(substr(name,2))) as name
from
Users
order by
user_id
相关的字符串函数方法,自己查阅吧,很详细,哪个方法不会查哪个
https://dev.mysql.com/doc/refman/5.7/en/string-functions.html#function_length