目录
语法
substring(column_name, start, length)用于从一个字符串中提取子字符串
- column_name(或任何字符串表达式):这是要从中提取子字符串的列名或字符串表达式。
- start:这是子字符串开始的位置。注意,这个位置是基于1的索引(在大多数SQL方言中,尽管某些语言或框架可能使用基于0的索引),并且如果start是负数,那么它的解释会依赖于具体的SQL数据库系统。
- length(可选):这是要提取的子字符串的长度。如果省略这个参数,那么从start位置开始直到原字符串的末尾的所有字符都会被提取。
upper(expression)
- 用于将指定的字符串表达式(expression)中的所有字母字符转换为大写。expression 可以是列名、字符串常量、另一个函数的返回结果,或者是这些元素通过运算符连接起来的表达式。
lower(expression)
- 用于将指定的字符串表达式(expression)中的所有字母字符转换为小写。expression 可以是列名、字符串常量、另一个函数的返回结果,或者是这些元素通过运算符连接起来的表达式。
concat(string1, string2, ...)
- string1, string2, ..., stringN:这是要连接的一个或多个字符串参数。
- 用于将两个或多个字符串值连接成一个字符串。这个函数可以接受两个或更多的字符串参数,并将它们按照指定的顺序连接成一个新的字符串。如果任何参数是 NULL,那么整个concat函数的结果也将是 NULL
- 在某些数据库系统中,比如 MySQL,从 5.7.6 版本开始,如果任何参数是 NULL,则会被视为空字符串 '',而不会影响其他非 NULL 参数的连接
需求
表: Users
+----------------+---------+
| Column Name | Type |
+----------------+---------+
| user_id | int |
| name | varchar |
+----------------+---------+
user_id 是该表的主键(具有唯一值的列)。
该表包含用户的 ID 和名字。名字仅由小写和大写字符组成。
编写解决方案,修复名字,使得只有第一个字符是大写的,其余都是小写的。
返回按 user_id
排序的结果表。
示例
输入:
Users table:
+---------+-------+
| user_id | name |
+---------+-------+
| 1 | aLice |
| 2 | bOB |
+---------+-------+
输出:
+---------+-------+
| user_id | name |
+---------+-------+
| 1 | Alice |
| 2 | Bob |
+---------+-------+
分析
使得只有第一个字符是大写的
通过substring(name,1,1)选取第一个字符,然后通过upper使得其为大写,upper(substring(name,1,1))
或者通过left(name, 1)选取第一个字符
其余字符都是小写的
其他字符即第一个字符以后的所有字符,通过substring(name,2)选取第二个字符及其之后的字符,通过lower使得它们变为小写形式,lower(substring(name,2))
拼接字符
字符分开处理后通过concat进行拼接,concat(upper(substring(name,1,1)), lower(substring(name,2)))
返回按 user_id 排序的结果
通过order by进行排序,order by user_id
代码
select user_id, concat(upper(substring(name,1,1)), lower(substring(name,2))) name
from Users
order by user_id
或者字符选取部分可通过left(name, 1)和right(name, length(name) - 1)实现
select user_id, concat(upper(left(name, 1)), lower(right(name, length(name) - 1))) name
from Users
order by user_id