当前位置: 首页 > article >正文

MySQL常见字段值处理

一、数据拼接

1、CONCAT

CONCAT(string1, string2, ..., stringN),将两个或多个字符串连接在一起

  • 自动忽略 NULL 值参数,仅拼接非 NULL 的字符串。

  • 第一个参数必须是分隔符(字符串)。


SELECT CONCAT('Hello', ' ', 'World');  -- 输出: Hello World
SELECT CONCAT('Hello', NULL, 'World'); -- 输出: NULL

2、CONCAT_WS

CONCAT_WS(separator, str1, str2, ..., strN)

CONCAT_WS() 函数是一个特殊的 CONCAT(),它允许你指定一个分隔符来连接字符串。WS 表示“With Separator”。

  • 自动忽略 NULL 值参数,仅拼接非 NULL 的字符串。

  • 第一个参数必须是分隔符(字符串)。


SELECT CONCAT_WS('-', '2023', '08', '20');  -- 输出: 2023-08-20
SELECT CONCAT_WS(',', 'Apple', NULL, 'Banana'); -- 输出: Apple,Banana

二、空值判断

1、是否为NULL

1)IS NULL:返回NULL空字符串记录

SELECT * FROM table_name WHERE column_name IS NULL;

 2)IS NOT NULL:返回不为NULL的字符串记录

SELECT * FROM table_name WHERE column_name IS NOT NULL;

2、是否空字符串

1)='':返回为空字符串

SELECT * FROM table_name WHERE column_name = '';

2)<>'':返回不为空字符串 

SELECT * FROM table_name WHERE column_name <> '';

 3、同时判断NULL和空字符串

1)使用IFNULLCOALESCE

IFNULL():如果字段为 NULL,则返回指定值。


SELECT IFNULL(column_name, '固定值') FROM table_name;

COALESCE():返回第一个非 NULL 的值


SELECT COALESCE(column_name, 'Default Value') FROM table_name;

2)NULLIF():字段等于指定值(如空字符串),则返回 NULL


SELECT NULLIF(column_name, '') FROM table_name;

4、处理NULL和空字符串

1)NULL和空字符串统一处理

SELECT * FROM table_name WHERE COALESCE(column_name, '') = '';

2)NULL转换为空字符串

SELECT IFNULL(column_name, '') FROM table_name;

3)空字符串转换为 NULL

SELECT NULLIF(column_name, '') FROM table_name;

三、数据替换

1、REPLACE函数

REPLACE(字段名, 旧字符串, 新字符串):简单替换,主要用于字符串

-- 将 name 字段中的 "旧" 替换为 "新"
SELECT REPLACE(name, '旧', '新') AS new_name FROM products;-- 更新表数据(永久替换)
UPDATE products SET name = REPLACE(name, '旧', '新');

2、UPDATE语句

UPDATE your_table
SET column_name = REPLACE(column_name, 'old_value', 'new_value')
WHERE column_name LIKE '%old_value%';

3、UPDATE结合CASE

CASE WHEN可以处理多种数据类型,主要用于复杂逻辑

语法:

        CASE 
                WHEN 条件1 THEN 替换值1
                WHEN 条件2 THEN 替换值2
                ELSE 默认值
        END

-- 根据 score 的值替换等级
SELECT name,CASE WHEN score >= 90 THEN 'A'WHEN score >= 80 THEN 'B'ELSE 'C'END AS grade
FROM students;-- 更新表数据(将负库存标记为缺货)
UPDATE inventory 
SET stock_status = CASE WHEN stock <= 0 THEN '缺货'ELSE '有货'
END;

4、COALESCE和IFNULL

IFNULL(字段名, 默认值)  -- 若字段为 NULL,返回默认值
COALESCE(字段名, 备用值1, 备用值2)  -- 返回第一个非 NULL 的值

-- 将 NULL 替换为 "未知"
SELECT IFNULL(email, '未知') AS user_email FROM users;-- 优先使用 phone,若为 NULL 则用备用电话
SELECT COALESCE(phone, backup_phone, '无联系方式') AS contact FROM customers;

 5、正则表达式

REGEXP_REPLACE(字段名, 正则表达式, 新字符串)函数,从MySQL 8.0开始,你可以使用正则表达式进行更复杂的替换。


-- 所有数字替换为X
UPDATE your_table
SET column_name = REGEXP_REPLACE(column_name, '[0-9]', 'X');

6、INSERT

INSERT(原字符串, 起始位置, 替换长度, 新字符串)

-- 将手机号中间四位替换为 ****
SELECT INSERT(phone, 4, 4, '****') AS masked_phone FROM users;

四、空格处理

1、去除空格的核心函数

1)首尾TRIM

TRIM()去除首尾空格;SELECT TRIM('  示例文字  ');  -- 输出: '示例文字'

-- 查询时去除首尾空格
SELECT TRIM(username) AS clean_name FROM users;-- 永久更新数据
UPDATE users SET username = TRIM(username);
2)左LRTM右RTRIM
SELECT LTRIM('  左侧空格');  -- 输出: '左侧空格'
SELECT RTRIM('右侧空格  ');  -- 输出: '右侧空格'
3)所有空格REPLACE

SELECT REPLACE('中 间 空 格', ' ', '');  -- 输出: '中间空格'

-- 删除 phone 字段中的所有空格
UPDATE customers SET phone = REPLACE(phone, ' ', '');

注意事项

  1. 大表更新时,分批处理(如 LIMIT 1000)。

  2. 为筛选字段添加索引(如 WHERE 条件字段)。

  3. TRIM('') 返回空字符串,TRIM(NULL) 返回 NULL

  4. 使用 COALESCE(TRIM(field), '') 确保结果非 NULL

4)条件处理
SELECT CASE WHEN CHAR_LENGTH(TRIM(notes)) = 0 THEN '无备注'ELSE TRIM(notes)END AS formatted_notes
FROM orders;

动态格式化输出 

-- 显示地址信息(首尾无空格,中间连续空格合并为单个)
SELECT id,REGEXP_REPLACE(TRIM(address), ' +', ' ') AS formatted_address
FROM customers;

五、数据截取

1、字符串

1)SUBSTR、SUBSTRING

从指定位置截取字符串的指定长度。

SUBSTRING(str, start_pos, length);SUBSTR(str, start_pos, length)  -- 与SUBSTRING功能相同

start_pos:起始位置(从1开始计数)。

SELECT SUBSTRING('Hello World', 7, 5);  -- 输出: 'World'
SELECT SUBSTR('2023-08-20', 1, 4);     -- 输出: '2023'(截取年份)
2)LEFT、RIGHT

分别从左侧或右侧截取指定长度的字符串。

LEFT(str, length)   -- 从左截取;RIGHT(str, length)  -- 从右截取

SELECT LEFT('MySQL Tutorial', 5);   -- 输出: 'MySQL'
SELECT RIGHT('123-456-7890', 4);   -- 输出: '7890'(截取手机号后四位)
3)MID

与SUBSTRING()相同,但其语法更直观

SELECT MID('ABCDEFG', 3, 2);  -- 输出: 'CD'

2、数值

1)TRUNCATE

TRUNCATE(number, decimals)截断数值的小数部分,保留指定小数位

SELECT TRUNCATE(123.4567, 2);  -- 输出: 123.45
SELECT TRUNCATE(123.4567, -1); -- 输出: 120(截断整数部分)
2)ROUND

四舍五入到指定小数位(与 TRUNCATE 的区别在于是否四舍五入)

SELECT ROUND(123.4567, 2);  -- 输出: 123.46

3、日期时间

1)DATE_FORMAT

DATE_FORMAT(date, format):格式化日期时间字段,提取特定部分(如年、月、日)

%Y:四位年份(如2023)
%m:两位月份(01-12)
%d:两位日期(01-31)
%H:小时(00-23)
%i:分钟(00-59)SELECT DATE_FORMAT(NOW(), '%Y-%m');  -- 输出: '2023-08'

2)专用日期函数

提取年/月/日

SELECT YEAR('2023-08-20') AS year,   -- 输出: 2023MONTH('2023-08-20') AS month, -- 输出: 8DAY('2023-08-20') AS day;     -- 输出: 20

4、JSON

JSON_EXTRACT


SELECT JSON_EXTRACT('{"name": "Alice", "age": 25}', '$.name'); -- 输出: "Alice"

5、正则表达式

REGEXP_SUBSTR


SELECT REGEXP_SUBSTR('Email: alice@example.com', '[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\\.[A-Za-z]{2,4}');
-- 输出: 'alice@example.com'

相关文章:

MySQL常见字段值处理

一、数据拼接 1、CONCAT CONCAT(string1, string2, ..., stringN)&#xff0c;将两个或多个字符串连接在一起 自动忽略 NULL 值参数&#xff0c;仅拼接非 NULL 的字符串。 第一个参数必须是分隔符&#xff08;字符串&#xff09;。 SELECT CONCAT(Hello, , World); -- 输…...

OpenCV实现图像分割与无缝合并

一、图像分割核心方法 1、阈值分割 #include <opencv2/opencv.hpp> using namespace cv; int main() {Mat img imread("input.jpg", IMREAD_GRAYSCALE);Mat binary;threshold(img, binary, 127, 255, THRESH_BINARY); // 固定阈值分割imwrite("binary.…...

百度之星2023——公园

这道题目用bfs做反而麻烦了。 首先抓题目关键字&#xff0c;要求“最少”&#xff0c;那大概率就是最短路径问题。虽然这题是一个无权图&#xff0c;用bfs也能求最短路径&#xff0c;但是我们知道使用dijkstra是能够利用dist数组持久化最短路径的&#xff0c;相比每次都要bfs&…...

从零搭建微服务项目Pro(第3-1章——本地/OSS图片文件存取)

前言&#xff1a; 在小型demo项目中&#xff0c;一般将图片音频等字节流文件存放本地数据库&#xff0c;但企业级项目中&#xff0c;由于数据量容量有限&#xff0c;需要借助OSS来管理大规模文件。 OSS&#xff08;对象存储服务&#xff0c;Object Storage Service&#xff0…...

游戏引擎学习第147天

仓库:https://gitee.com/mrxiao_com/2d_game_3 上一集回顾 具体来说&#xff0c;我们通过隐式计算来解决问题&#xff0c;而不是像数字微分分析器那样逐步增加数据。我们已经涵盖了这个部分&#xff0c;并计划继续处理音量问题。不过&#xff0c;实际上我们现在不需要继续处理…...

Spring boot启动原理及相关组件

优质博文&#xff1a;IT-BLOG-CN 一、Spring Boot应用启动 一个Spring Boot应用的启动通常如下&#xff1a; SpringBootApplication Slf4j public class ApplicationMain {public static void main(String[] args) {ConfigurableApplicationContext ctx SpringApplication.…...

【Linux】信号处理以及补充知识

目录 一、信号被处理的时机&#xff1a; 1、理解&#xff1a; 2、内核态与用户态&#xff1a; 1、概念&#xff1a; 2、重谈地址空间&#xff1a; 3、处理时机&#xff1a; 补充知识&#xff1a; 1、sigaction&#xff1a; 2、函数重入&#xff1a; 3、volatile&…...

微服务——网关、网关登录校验、OpenFeign传递共享信息、Nacos共享配置以及热更新、动态路由

之前学习了Nacos&#xff0c;用于发现并注册、管理项目里所有的微服务&#xff0c;而OpenFeign简化微服务之间的通信&#xff0c;而为了使得前端可以使用微服务项目里的每一个微服务的接口&#xff0c;就应该将所有微服务的接口管理起来方便前端调用&#xff0c;所以有了网关。…...

【leetcode hot 100 19】删除链表的第N个节点

解法一&#xff1a;将ListNode放入ArrayList中&#xff0c;要删除的元素为num list.size()-n。如果num 0则将头节点删除&#xff1b;否则利用num-1个元素的next删除第num个元素。 /*** Definition for singly-linked list.* public class ListNode {* int val;* Lis…...

comctl32!ListView_OnSetItem函数分析LISTSUBITEM结构中的image表示图标位置

第一部分&#xff1a; BOOL ListView_SetSubItem(LV* plv, const LV_ITEM* plvi) { LISTSUBITEM lsi; BOOL fChanged FALSE; int i; int idpa; HDPA hdpa; if (plvi->mask & ~(LVIF_DI_SETITEM | LVIF_TEXT | LVIF_IMAGE | LVIF_STATE)) { …...

数据结构——多项式问题(顺序存储结构or链式存储结构)

补充&#xff1a;malloc函数&#xff1a; malloc 函数是 C 语言标准库中的一个重要函数&#xff0c;位于 <stdlib.h> 头文件中&#xff0c;主要用于在程序运行时动态分配内存。以下将详细介绍其用法。 前面的返回值指针可以自己定义&#xff0c;如 &#xff08;int*&am…...

【学习方法】技术开发者的提问智慧:如何高效获得解答?

技术开发者的提问智慧&#xff1a;如何高效获得解答&#xff1f; 在技术开发过程中&#xff0c;每个人都会遇到无法解决的问题。此时&#xff0c;我们通常会向团队、社区或论坛求助。然而&#xff0c;为什么有些人的问题能迅速得到解答&#xff0c;而有些人的问题却石沉大海&a…...

记录小白使用 Cursor 开发第一个微信小程序(一):注册账号及下载工具(250308)

文章目录 记录小白使用 Cursor 开发第一个微信小程序&#xff08;一&#xff09;&#xff1a;注册账号及下载工具&#xff08;250308&#xff09;一、微信小程序注册摘要1.1 注册流程要点 二、小程序发布流程三、下载工具 记录小白使用 Cursor 开发第一个微信小程序&#xff08…...

vue2项目修改浏览器显示的网页图标

1.准备一个新的图标文件&#xff0c;通常是. ico格式&#xff0c;也可以是. Png、. Svg等格式 2.将新的图标文件(例如&#xff1a;faviconAt.png)放入项目的public文件夹中。如下图 public文件夹中的所有文件都会在构建时原样复制到最终的输出目录(通常是dist) 3. 修改vue项目…...

spring boot3.4.3+MybatisPlus3.5.5+swagger-ui2.7.0

使用 MyBatis-Plus 操作 books 表。我们将实现以下功能&#xff1a; 创建实体类 Book。 创建 Mapper 接口 BookMapper。 创建 Service 层 BookService 和 BookServiceImpl。 创建 Controller 层 BookController。 配置 MyBatis-Plus 和数据库连接。 1. 项目结构 src ├─…...

【网络安全工程】任务10:三层交换机配置

CSDN 原创主页&#xff1a;不羁https://blog.csdn.net/2303_76492156?typeblog三层交换机是指在OSI&#xff08;开放系统互连&#xff09;模型中的第三层网络层提供路由功能的交换机。它不仅具备二层交换机的交换功能&#xff0c;还能实现路由功能&#xff0c;提供更为灵活的网…...

侯捷 C++ 课程学习笔记:C++内存管理机制

内存管理从平地到万丈高楼 内存管理入门&#xff08;Memory Management 101&#xff09; 需要具有动态分配并使用memory&#xff08;存储&#xff08;器&#xff09;&#xff0c;&#xff08;计算机的&#xff09;内存&#xff09;&#xff0c;使用过C标准库的容器&#xff0…...

JVM常用概念之本地内存跟踪

问题 Java应用启动或者运行过程中报“内存不足&#xff01;”&#xff0c;我们该怎么办? 基础知识 对于一个在本地机器运行的JVM应用而言&#xff0c;需要足够的内存来存储机器代码、堆元数据、类元数据、内存分析等数据结构&#xff0c;来保证JVM应用的成功启动以及未来平…...

【鸿蒙开发】Hi3861学习笔记- 软件定时器示例

00. 目录 文章目录 00. 目录01. 定时器概述02. 定时器API03. 定时器常用API3.1 osTimerNew3.2 osTimerDelete3.3 osTimerStart3.4 osTimerStop 04. 程序示例05. 附录 01. 定时器概述 软件定时器&#xff0c;是基于系统Tick时钟中断且由软件来模拟的定时器&#xff0c;当经过设…...

在Html5中仿Matlab自定义色带生成实践

目录 前言 一、RGB的相关知识 1、RGB的基本原理 2、RGB的数值表示 3、应用场景 二、ColorMap生成实战 1、外部库介绍 2、相关API 3、实例生成 三、总结 前言 在现代网页开发与数据可视化领域&#xff0c;色彩的表现力对于信息传达和视觉体验起着至关重要的作用。色带&…...

贪心算法--

1.柠檬水找零 link:860. 柠檬水找零 - 力扣&#xff08;LeetCode&#xff09; code class Solution { public:bool lemonadeChange(vector<int>& bills) {// 贪心算法&#xff0c; 优先花出大面额bill&#xff0c; 尽可能保护小面额billint five 0, ten 0;// 不…...

【学习方法一】

学习方法一 一、通用高效学习法二、学科专项方法三、工具与技术辅助四、习惯与心理策略五、避免常见误区总结六、进阶学习策略七、解决学习痛点八、场景化学习法九、资源与工具推荐十、个性化学习调整十一、长期学习心态十二、常见问题QA十三、应对特殊挑战的学习法十四、健康与…...

k8s启动时calico-kube-controllers与coredns组件一直是pending状态

症状&#xff1a; k8s执行kubectl get po -n kube-system时&#xff0c;以下组件一直>是pending状态&#xff1a; calico-kube-controllerscoredns 当执行 kubectl get po -n kube-system 发现 calico-kube-controllers 和 coredns 一直处于 Pending 状态时&#xff0c;通常…...

ngx_openssl_create_conf

ngx_openssl_create_conf 声明在 src\event\ngx_event_openssl.c static void *ngx_openssl_create_conf(ngx_cycle_t *cycle); 定义在 src\event\ngx_event_openssl.c static void * ngx_openssl_create_conf(ngx_cycle_t *cycle) {ngx_openssl_conf_t *oscf;oscf ngx_…...

如何选择国产串口屏?

目录 1、迪文 2、淘晶驰 3、广州大彩 4、金玺智控 5、欣瑞达 6、富莱新 7、冠显 8、有彩 串口屏&#xff0c;顾名思义&#xff0c;就是通过串口通信接口&#xff08;如RS232、RS485、TTL UART等&#xff09;与主控设备进行通信的显示屏。其核心功能是显示信息和接收输入…...

matlab慕课学习3.1

3.1顺序结构程序 于20250306 3.1.1程序和程序设计 程序是用某种计算机能够理解并且能够执行的语言来描述的解决问题的方法和步骤。 3.1.2程序的三种基本结构 1.顺序结构 2.选择结构 3.循环结构 3.1.3脚本文件和函数文件 脚本文件是可在命令行窗口直接执行的文件&#xff0…...

EB-Cable许可管理系统的功能和特点

在数字化时代&#xff0c;软件许可管理已成为企业日常运营中不可或缺的一部分。EB-Cable许可管理系统作为一款专为电缆管理而设计的软件解决方案&#xff0c;为企业提供了全面、高效且灵活的许可管理功能。本文将详细介绍EB-Cable许可管理系统的功能和特点&#xff0c;帮助您快…...

cesium地图设置3d,2d,2.5d动态切换

通过修改cesium实例vw的scene的显示模式&#xff0c;来切换最终的显示模式。 Cesium.SceneMode总共有四个变量值&#xff0c;分别如下&#xff1a;NameTypeDescriptionMORPHINGnumber在3d与2d之间切换变体 between mode, e.g., 3D to 2D.COLUMBUS_VIEWnumber2.5d模式&#xff0…...

Mac如何查看 IDEA 的日志文件

在 macOS 上&#xff0c;IntelliJ IDEA 的日志文件通常存储在用户目录下的 .IntelliJIdea<版本号> 文件夹中。以下是查看日志文件的具体步骤&#xff1a; 1. 找到日志文件的位置 日志文件通常位于以下路径&#xff1a; ~/Library/Logs/IntelliJIdea<版本号> 其…...

linux 软件安装(下)

七、ElasticSearch安装 官网地址&#xff1a;Elasticsearch&#xff1a;官方分布式搜索和分析引擎 | Elastic ​ 官网下载地址&#xff1a;Past Releases of Elastic Stack Software | Elastic 7.1、linux安装 1、上传安装包 altp # 打开sftp窗口 # 上传es安装包 put e:/sof…...