Mysql查询去空格方法汇总

本文档详述了在数据库中遇到字段存在异常空格的问题,包括首尾空格和不间断空格。通过trim()、ltrim()、rtrim()函数以及replace()函数的使用进行清理,并介绍了convert()函数如何配合处理不间断空格。同时提供了解决Excel导入数据时遇到的特殊空格问题的方法,帮助读者理解和解决类似问题。
部署运行你感兴趣的模型镜像

目录

一、背景

二、方法

1、trim()、ltrim()、rtrim()函数

(1)trim()去除字段首尾空白字符,也可以去除指定字符

(2)ltrim()去除左空格

(3)rtrim()去除右空格

2、replace()函数

3、convert()函数配合trim()函数(解决了我的问题)


一、背景

        最近系统线上数据库数据出现一个问题,发现某些字段存在一些异常的首尾空格,不管是使用trim对比还是like查询都查询不到具体的数据;在网上找了一些方法,最后发现一个去“不间断空格”的方法解决了问题,在这里做一下记录和汇总。

二、方法

1、trim()、ltrim()、rtrim()函数

语法:trim(字段)  ||  trim([{BOTH | LEADING | TRAILING} [指定字符] FROM] 字段)

(1)trim()去除字段首尾空白字符,也可以去除指定字符

列子:去除商品零件号左右空格,以及指定字符,打印去除字符后的长度

select
	p.parts_num as "零件号(包含首尾各3个空格)",
	length(p.parts_num) as "原始长度",
	trim(p.parts_num),
	length(trim(p.parts_num)) as "去除左右空格后长度",
	trim(leading '   7' from p.parts_num),
	length(trim(leading '   7' from p.parts_num)) as "去除左边字符后长度",
	trim(trailing '7   ' from p.parts_num),
	length(trim(trailing '7   ' from p.parts_num)) as "去除右边字符后长度"
from
	product p
where
	p.product_id = "1941573845271945216";

结果:

(2)ltrim()去除左空格

select
	p.parts_num as "零件号(包含首尾各3个空格)",
	length(p.parts_num) as "原始长度",
	ltrim(p.parts_num),
	length(ltrim(p.parts_num)) as "去除左空格后长度"
from
	product p
where
	p.product_id = "1941573845271945216";

结果:

(3)rtrim()去除右空格

select
	p.parts_num as "零件号(包含首尾各3个空格)",
	length(p.parts_num) as "原始长度",
	rtrim(p.parts_num),
	length(rtrim(p.parts_num)) as "去除右空格后长度"
from
	product p
where
	p.product_id = "1941573845271945216";

结果:

2、replace()函数

语法:replace(object,search,replace)

(1)替换字段中指定字符为新字符

select
	p.parts_num as "零件号(包含首尾各3个空格)",
	length(p.parts_num) as "原始长度",
	replace(p.parts_num, ' ', ''),
	length(replace(p.parts_num, ' ', '')) as "替换空格后长度",
	replace(p.parts_num, '7', '8') as "把7替换成8"
from
	product p
where
	p.product_id = "1941573845271945216";

结果:

(2)指定去除一下特殊字符

水平制表符:CHAR(9)、换行符:CHAR(10)、回车符:CHAR(13)

REPLACE(REPLACE(REPLACE(p.parts_num, CHAR(9), ''), CHAR(10), ''), CHAR(13), '')

3、convert()函数配合trim()函数(解决了我的问题)

(1)使用convert()先转换一些特殊编码的空格(unicode码位u+00a0的utf-8编码,也称为不间断空格)转换成常规空格(ASCII 中编码为0x20)

-- convert转换,trim去除
select TRIM(convert(0xC2A0 using utf8mb4) FROM p.parts_num);

-- 替换掉字符中的不间断空格
select TRIM(REPLACE(p.parts_num, convert(0xC2A0 using utf8mb4), ' '));

这些特殊空格一般常见于各文本编辑器(word、Excel等,刚好出现问题的业务存在Excel导入数据的场景),想要详细了解看下面推荐的文章。

发现一篇有关各种空格的介绍文章,很全面,推荐一下:你不知道的空格 - 走看看

您可能感兴趣的与本文相关的镜像

ACE-Step

ACE-Step

音乐合成
ACE-Step

ACE-Step是由中国团队阶跃星辰(StepFun)与ACE Studio联手打造的开源音乐生成模型。 它拥有3.5B参数量,支持快速高质量生成、强可控性和易于拓展的特点。 最厉害的是,它可以生成多种语言的歌曲,包括但不限于中文、英文、日文等19种语言

<think> 我们参考用户的问题:“我想查找在MySQL中修改SUM查询输出字段的方法 请问MySQL中如何修改SUM查询的输出字段” 根据引用[1]中提到的“聚合函数”部分,特别是sum函数,以及引用[2]和引用[3]中关于sum查询的示例,我们可以知道: 在MySQL中,使用SUM()函数进行求和查询时,输出的字段名通常是“SUM(column_name)”。但我们可以通过AS关键字来修改这个输出字段的名称(别名)。 例如,引用[2]中:`select sum(t3.num) as s ...`,这里将sum(t3.num)的结果命名为s。 引用[3]中:`SUM(b.goods_number) AS goods_number2`,将求和结果命名为goods_number2。 因此,修改SUM查询输出字段的方法就是使用AS关键字给聚合函数的结果指定一个别名。 此外,我们还可以在GROUP BY子句中使用别名吗?注意:在标准SQL中,不能在WHERE子句中使用列别名,因为WHERE子句在SELECT之前执行。但在GROUP BY、HAVING和ORDER BY子句中可以使用别名,因为它们的执行顺序在SELECT之后。 下面我们将详细说明: 1. 基本语法:在SELECT语句中,使用AS关键字为SUM()函数的结果指定别名。 例如:`SELECT SUM(column_name) AS new_name FROM table_name;` 2. 结合GROUP BY:当我们需要按某个字段分组求和时,同样可以使用别名。 例如:`SELECT category, SUM(amount) AS total_amount FROM sales GROUP BY category;` 3. 在HAVING或ORDER BY子句中使用别名:因为别名是在SELECT子句中定义的,所以在HAVING和ORDER BY子句中可以使用别名。 例如:`SELECT category, SUM(amount) AS total_amount FROM sales GROUP BY category HAVING total_amount > 1000 ORDER BY total_amount DESC;` 4. 注意:在WHERE子句中不能使用别名,因为WHERE子句在SELECT子句之前执行,此时别名还未被定义。 5. 如果别名中包含空格或特殊字符,需要使用引号(单引号或双引号)括起来,例如:`SUM(amount) AS 'Total Amount'`。 因此,回答用户的问题:修改SUM查询的输出字段,就是通过AS关键字给SUM()函数的结果赋予一个别名。 我们还可以给出一个完整的示例: 假设有一个订单详情表(order_details),包含订单ID(order_id)、商品ID(product_id)和数量(quantity)等字段。 我们想要计算每个订单的总数量,并将输出字段命名为total_quantity。 示例SQL: ```sql SELECT order_id, SUM(quantity) AS total_quantity FROM order_details GROUP BY order_id; ``` 这样,结果集中就会用total_quantity作为求和结果的列名。 另外,根据引用[4],虽然它是关于添加删除修改字段的,但这里不适用。我们主要参考引用[1][2][3]中关于聚合函数和别名的使用。 最后,生成相关问题: 1. 如何在MySQL中为其他聚合函数(如COUNT, AVG)的结果设置别名? 2. 在MySQL中,GROUP BY子句如何使用别名? 3. 能否在同一个查询中使用多个聚合函数并为它们分别设置别名? 4. 在WHERE子句中为什么不能使用别名?有什么替代方法? 5. 如何为包含空格的字段设置别名? 注意:回答中引用的段落末尾要添加引用标识。由于我们的回答主要参考了引用[1][2][3],所以在相关位置添加引用[^1][^2][^3]。 </think>### MySQL中修改SUM查询输出字段的方法MySQL中,可以通过以下两种方式修改SUM查询的输出字段: #### 1. **使用`AS`关键字设置别名** 这是最直接的方式,通过`AS`为SUM结果指定新列名: ```sql SELECT SUM(column_name) AS new_column_name -- 修改输出字段名 FROM table_name [WHERE conditions] [GROUP BY group_column]; ``` **示例**:将销售总额字段重命名为`total_sales` ```sql SELECT product_id, SUM(quantity * price) AS total_sales -- 输出字段显示为total_sales FROM orders GROUP BY product_id; ``` #### 2. **通过子查询修改** 当需要基于SUM结果进行复杂操作时,可使用子查询: ```sql SELECT subquery.total_amount AS formatted_total -- 修改子查询结果的字段名 FROM ( SELECT order_id, SUM(amount) AS total_amount -- 子查询内命名 FROM order_details GROUP BY order_id ) AS subquery WHERE subquery.total_amount > 1000; ``` ### 关键注意事项 1. **别名作用域**: - `AS`定义的别名可在`HAVING`、`ORDER BY`中使用 ✅ - 不可在`WHERE`中使用 ❌(因`WHERE`执行顺序早于`SELECT`) 2. **特殊字符处理**: 若别名含空格或特殊字符,需用反引号包裹: ```sql SUM(sales) AS `Total Revenue (USD)` ``` 3. **与`GROUP BY`配合**: ```sql SELECT department, SUM(salary) AS department_payroll -- 按部门汇总薪资 FROM employees GROUP BY department; ``` ### 性能建议 - 避免在`WHERE`中对SUM结果过滤,改用`HAVING`: ```sql SELECT product_id, SUM(quantity) AS total_qty FROM sales GROUP BY product_id HAVING total_qty > 100; -- 正确用法 ``` > **提示**:通过`EXPLAIN`分析查询性能,尤其当处理大数据量时[^1][^3]。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值