【SQL】统一字符格式

目录

语法

需求

示例

分析

代码


语法

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

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

F_D_Z

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值