SQL中提供了专门的字符串函数来实现大小写转换,不同数据库系统的函数名称和用法略有差异,但核心功能一致,主要分为大写转换和小写转换两类。

通用大小写转换函数
UPPER函数:转为大写
UPPER函数的作用是将字符串中的所有小写字母转换为大写字母,非字母字符保持不变,大部分主流数据库都支持该函数。
以MySQL为例,使用示例如下:
-- 将指定字符串转为大写
SELECT UPPER('hello sql') AS upper_result;
-- 对表中字段进行大小写转换
SELECT UPPER(user_name) AS formatted_name FROM user_info;
上述代码执行后,第一个查询会返回HELLO SQL,第二个查询会将user_info表中user_name字段的所有值转为大写后返回。
LOWER函数:转为小写
LOWER函数的功能和UPPER相反,是将字符串中的所有大写字母转换为小写字母,非字母字符同样保持不变。
MySQL中的使用示例如下:
-- 将指定字符串转为小写
SELECT LOWER('HELLO SQL') AS lower_result;
-- 对表中字段进行小写转换
SELECT LOWER(product_name) AS formatted_product FROM product_info;
第一个查询会返回hello sql,第二个查询会将product_info表中product_name字段的所有值转为小写后返回。
特殊场景的大小写转换函数
INITCAP函数:首字母大写
部分数据库如Oracle、PostgreSQL支持INITCAP函数,该函数会将字符串中每个单词的首字母转为大写,其余字母转为小写,适合处理名称类的字符串。
Oracle中的使用示例如下:
-- 将字符串每个单词首字母转为大写
SELECT INITCAP('hello world sql') AS initcap_result FROM DUAL;
该查询会返回Hello World Sql。
不同数据库的适配说明
不同数据库对大小写转换函数的支持情况存在差异,具体可以参考下表:
| 数据库类型 | 支持的大写转换函数 | 支持的小写转换函数 | 支持的首字母大写函数 |
|---|---|---|---|
| MySQL | UPPER | LOWER | 不支持,需自定义函数实现 |
| Oracle | UPPER | LOWER | INITCAP |
| SQL Server | UPPER | LOWER | 不支持,需自定义函数实现 |
| PostgreSQL | UPPER | LOWER | INITCAP |
使用注意事项
- 大小写转换函数不会影响原数据,只是返回转换后的结果,若需要修改表中存储的数据,需要结合UPDATE语句使用。
- 部分数据库的字符串比较默认不区分大小写,此时可能不需要额外转换大小写,具体需要根据数据库的排序规则判断。
- 处理包含中文的字符串时,大小写转换函数对中文无影响,只会处理英文字母部分。
如果需要在SQL Server中实现首字母大写的功能,可以通过自定义函数实现,示例如下:
-- 创建首字母大写自定义函数
CREATE FUNCTION dbo.INITCAP (@str NVARCHAR(MAX))
RETURNS NVARCHAR(MAX)
AS
BEGIN
DECLARE @result NVARCHAR(MAX) = LOWER(@str)
DECLARE @i INT = 1
WHILE @i <= LEN(@result)
BEGIN
-- 判断是否为单词开头
IF @i = 1 OR SUBSTRING(@result, @i - 1, 1) = ' '
BEGIN
SET @result = STUFF(@result, @i, 1, UPPER(SUBSTRING(@result, @i, 1)))
END
SET @i = @i + 1
END
RETURN @result
END
-- 调用自定义函数
SELECT dbo.INITCAP('hello sql server') AS custom_initcap_result
该自定义函数会先将字符串全部转为小写,再将每个空格后的第一个字符转为大写,最终返回Hello Sql Server。