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

数据库——MySQL字符、日期函数

一、字符函数详解

1. CONCAT() - 字符串拼接

作用:连接多个字符串,类似Java中的+号。
语法

CONCAT(string1, string2, ...)

示例

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

2. UPPER()/LOWER() - 大小写转换

作用:将字符串转换为全大写或全小写。
语法

UPPER(string)  -- 转大写
LOWER(string)  -- 转小写

示例

SELECT UPPER('hello') AS upper_case;  -- 输出:'HELLO'
SELECT LOWER('HELLO') AS lower_case;  -- 输出:'hello'

3. LENGTH() - 字符串长度

作用:返回字符串的字符数。
语法

LENGTH(string)

示例

SELECT LENGTH('MySQL') AS str_length; -- 输出:5

4. SUBSTRING() - 截取子串

作用:从指定位置截取特定长度的子字符串。
语法

SUBSTRING(string, start, length)

示例

SELECT SUBSTRING('Hello World', 1, 5) AS sub_str; 
-- 输出:'Hello'

5. REPLACE() - 替换子串

作用:将字符串中的指定子串替换为新内容。
语法

REPLACE(string, old_substr, new_substr)

示例

SELECT REPLACE('Hello World', 'World', 'SQL') AS new_str; 
-- 输出:'Hello SQL'

6. TRIM() - 去除两端空格

作用:清除字符串首尾的空格(中间空格保留)。
语法

TRIM(string)

示例

SELECT TRIM('   Hello   ') AS trimmed; -- 输出:'Hello'

二、日期函数详解

1. CURDATE()/NOW() - 当前日期与时间

作用:获取当前日期或日期时间。
语法

CURDATE()  -- 当前日期(如 '2023-10-01')
NOW()      -- 当前日期时间(如 '2023-10-01 14:30:00')

示例

SELECT CURDATE() AS today; 
-- 输出:当前日期(如 '2023-10-01')

2. DATEDIFF() - 日期差值计算

作用:计算两个日期之间的天数差。
语法

DATEDIFF(date1, date2)  -- 返回 date1 - date2 的天数

示例

SELECT DATEDIFF('2023-10-01', '2023-09-01') AS days; 
-- 输出:30

3. YEAR()/MONTH()/DAY() - 提取日期部分

作用:从日期中提取年、月、日。
语法

YEAR(date)   -- 提取年份
MONTH(date)  -- 提取月份(1-12)
DAY(date)    -- 提取日(1-31)

示例

SELECT YEAR('2023-05-20') AS year; -- 输出:2023

4. DATE_ADD()/DATE_SUB() - 日期加减

作用:对日期进行加减操作。
语法

DATE_ADD(date, INTERVAL n unit)  -- 加
DATE_SUB(date, INTERVAL n unit)  -- 减

示例

SELECT DATE_ADD('2023-01-01', INTERVAL 1 MONTH) AS new_date; 
-- 输出:'2023-02-01'

三、实战案例:员工信息表(emp)

1. 表结构与测试数据

CREATE TABLE emp (
    id INT AUTO_INCREMENT PRIMARY KEY,
    name VARCHAR(100),
    salary DECIMAL(10, 2),
    hire DATE,
    dept VARCHAR(50)
);

INSERT INTO emp (name, salary, hire, dept) VALUES
('张三', 60000, '2020-01-15', '技术部'),
('李四', 75000, '2019-03-22', '市场部'),
('王五', 50000, '2021-06-30', '人事部'),
('赵六', 80000, '2018-11-11', '财务部'),
('钱七', 90000, '2022-02-01', '技术部'),
('孙八', 65000, '2020-05-20', '市场部');

2. 基础查询

(1) 查询所有员工姓名和薪资
SELECT name, salary FROM emp;
(2) 查询薪资大于60000的员工姓名
SELECT name FROM emp WHERE salary > 60000;
-- 输出:李四、赵六、钱七、孙八

3. 字符函数应用

(1) 查询员工姓名长度
SELECT name, LENGTH(name) AS name_length FROM emp;
-- 示例输出:'张三' → 2
(2) 将姓名转换为大写
SELECT UPPER(name) AS upper_name FROM emp;
-- 示例输出:'张三' → '张三'(中文字符不受影响)
(3) 替换姓名字符
SELECT REPLACE(name, '张', '李') AS new_name FROM emp;
-- 示例输出:'张三' → '李三'

4. 日期函数应用

(1) 查询员工入职年份
SELECT name, YEAR(hire) AS hire_year FROM emp;
-- 示例输出:'张三' → 2020
(2) 计算在职天数
SELECT name, DATEDIFF(CURDATE(), hire) AS days_in_office FROM emp;
-- 输出:当前日期与入职日期的差值
(3) 查询入职超过3年的员工
SELECT name FROM emp 
WHERE DATEDIFF(CURDATE(), hire) > 3*365;
-- 输出:李四、赵六

5. 聚合与分组

(1) 按部门统计平均薪资
SELECT dept, AVG(salary) AS avg_salary 
FROM emp 
GROUP BY dept;
-- 示例输出:技术部 → 75000.00
(2) 按入职年份统计人数
SELECT YEAR(hire) AS year, COUNT(*) AS emp_count 
FROM emp 
GROUP BY YEAR(hire);
-- 示例输出:2020 → 2

四、关键概念与注意事项

  1. 字符函数

    • TRIM()仅去除首尾空格,中间空格需用REPLACE处理。

    • 中文字符在UPPER()/LOWER()中不会变化。

  2. 日期函数

    • DATEDIFF()忽略时间部分,仅计算日期差。

    • DATE_ADD支持单位:YEARMONTHDAYHOUR等。

  3. 性能优化

    • 避免在WHERE子句中对字段使用函数(如YEAR(hire) > 2020),改用范围查询。

    • 对频繁使用的日期计算字段可添加索引。


五、总结

字符和日期函数是MySQL数据处理的核心工具。通过CONCAT拼接信息、DATEDIFF分析时间间隔、结合聚合函数实现多维统计,能高效解决复杂业务需求。在实际开发中,建议结合业务场景多实践,并关注性能优化技巧,以提升查询效率。


http://www.kler.cn/a/613142.html

相关文章:

  • 字符串相加和字符串相乘
  • 通过Map类和List类的List<Map<>>组合类体会JSON
  • 7. 实现命名路由和反向路由
  • windows第十八章 菜单、工具栏、状态栏
  • leetcode102 二叉树的层次遍历 递归
  • [贪心算法] 加油站 单调递增的数字 坏了的计算器 合并区间 无重叠区间
  • MUX VLAN -- PVLAN
  • 每日一题之杨辉三角
  • 雕琢健康生活,奏响养生乐章
  • 一周掌握Flutter开发--9. 与原生交互(上)
  • Jmeter触发脚本备份
  • 《白帽子讲 Web 安全》之服务端请求伪造(SSRF)深度剖析:从攻击到防御
  • Sa-Token
  • 探索高效的图像处理:SMFA 模块与 DMlp 类的实现解析
  • 《 C语言实现:金字塔式星号图案打印》
  • FALL靶机攻略
  • B/S阅片项目算法梳理
  • 蓝桥杯省模拟赛 阶乘求值
  • OMI(operating mode indication)
  • 攻破tensorflow,勇创最佳agent(1)---学习率learning_rate问题