MySQL 中的 CAST 函数详解及常见用法

2025-07-03 17:50

本文主要是介绍MySQL 中的 CAST 函数详解及常见用法,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

《MySQL中的CAST函数详解及常见用法》CAST函数是MySQL中用于数据类型转换的重要函数,它允许你将一个值从一种数据类型转换为另一种数据类型,本文给大家介绍MySQL中的CAST...

MySQL 中的 CAST 函数详解

CAST 函数是 MySQL 中用于数据类型转换的重要函数,它允许你将一个值从一种数据类型转换为另一种数据类型。

一、基本语法

CAST(expression AS type)

CONVERT(expression, type)

这两种语法功能相同,可以互换使用。

二、支持的数据类型

CAST 函数支持转换为以下数据类型:

  • BINARY[(N)] - 二进制字符串
  • CHAR[(N)] - 字符串,可指定长度
  • DATE - 日期
  • DATETIME - 日期时间
  • DECIMAL[(M[,D])] - 十进制数,可指定精度和小数位
  • SIGNED [INTEGER] - 有符号整数
  • UNSIGNED [INTEGER] - 无符号整数
  • TIME - 时间
  • jsON - JSON 格式 (MySQL 5.7.8+)

三、常见用法示例

1. 字符串转数字

SELECT CAST('123' AS SIGNED);      -- 转换为有符号整数,结果为 123
SELECT CONVERT('45.67', DECIMAL(5,2)); -- 转换为带2位小数的十进制数,结果为 45.67

2. 数字转字符串

SELECT CAST(123 AS CHAR);          -- 转换为字符串,结果为 '123'
SELECTjavascript CAST(123.45 AS CHAR(10));   -- 转换为长度为10的字符串,结果为 '123.45'

3. 日期时间转换

SELECT CAST('2023-08-20' AS DATE); -- 转换为日期类型
SELECT CAST(NOW() AS CHAR);        -- 将当前日期时间转为字符串

4. 布尔值转换

SELECT CAST(1 AS UNSIGNED);        -- 结果为 1
SELECT CAST(0 AS SIGNED);          -- 结果为 0

5. 二进制转换

SELECT CAST('MySQL' AS BINARY);    -- 转换为二进制字符串
SELECT CAST(123 AS BINARY);        -- 将数字转为二进制

四、特殊转换案例

1. 处理 NULL 值

SELECT Chttp://www.chinasem.cnAST(NULL AS SIGNED);       -- 结果为 NULL

2. 截断处理

SELECT CAST('123.456' AS DECIMAL(5,2)); -- 结果为 123.46 (四舍五入)
SELECT CAST('123.456' AS DECIMAL(5,1)); -- 结果为 123.5 (四舍五入)

3. 转换失败处理

SELECT CAST('abc' AS SIGNED);      -- 结果为 0 (无法转换时返回0)
SELECT CAST('2023-02-30' AS DATE); -- 结果为 NULL (无效日期)

五、实际应用场景

1. 类型安全的比较

-- 避免字符串和数字的隐式转换
SELECT * FROM products WHERE CAST(price AS CHAR) LIKE '12%';

2. 格式化输出

SELECT 
    product_name,
    CONCAT('$', CAST(price AS DECIMALjs(10,2))) AS formatted_price
FROM products;

3. 数据迁移和清洗

-- 将字符串列转为数字进行计算
UPDATE orders 
SET total = CAST(subtotal AS DECIMAL(10,2)) + CAST(tax AS DECIMAL(10,2));

4. 动态SQL处理

SET @str_value = '123';
SELECT * FROM table WHERE id = CAST(@str_value AS SIGNED);

六、与 CONVERT 函数的区别

CAST 和 CONVERT 函数功能基本相同,但有细微差别:

  1. 语法不同:

    • CAST: CAST(expr AS www.chinasem.cntype)
    • CONVERT: CONVERT(expr, type)CONVERT(expr USING charset)
  2. CONVERT 额外支持字符集转换:

    SELECT CONVERT('MySQL' USING utf8mb4);
    

七、性能考虑

  1. 索引使用:对列使用 CAST 函数通常会导致索引失效

    -- 不推荐 (索引失效)
    SELECT * FROM users WHERE CAST(age AS CHAR) = '25';
    
    -- 推荐 (可以使用索引)
    SELECT * FROM users WHERE age = 25;
    
  2. 隐式转换:MySQL 会自动进行某些类型转换,但显式使用 CAST 更安全明确

  3. 精度损失:转换时要注意可能的精度损失或数据截断

八、与其他数据库的兼容性

  1. CAST 函数是 SQL 标准的一部分,在大多数数据库中都支持
  2. 语法基本相同,但支持的数据类型可能略有差异
  3. MySQL 的 CAST 在某些情况下比其他数据库更宽松(如字符串转数字)

CAST 函数是 MySQL 中处理数据类型转换的强大工具,合理使用可以确保数据的一致性和查询的正确性。在需要明确控制数据类型转换的场景下,CAST 函数是必不可少的。

到此这篇关于MySQL 中的 CAST 函数详解的文章就介绍到这了,更多相关MySQL CAST 函数内容请搜索China编程(www.chinasem.cn)以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程China编程(www.chinasem.cn)!

这篇关于MySQL 中的 CAST 函数详解及常见用法的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1155291

相关文章

Java利用@SneakyThrows注解提升异常处理效率详解

《Java利用@SneakyThrows注解提升异常处理效率详解》这篇文章将深度剖析@SneakyThrows的原理,用法,适用场景以及隐藏的陷阱,看看它如何让Java异常处理效率飙升50%,感兴趣的... 目录前言一、检查型异常的“诅咒”:为什么Java开发者讨厌它1.1 检查型异常的痛点1.2 为什么说

MySQL的配置文件详解及实例代码

《MySQL的配置文件详解及实例代码》MySQL的配置文件是服务器运行的重要组成部分,用于设置服务器操作的各种参数,下面:本文主要介绍MySQL配置文件的相关资料,文中通过代码介绍的非常详细,需要... 目录前言一、配置文件结构1.[mysqld]2.[client]3.[mysql]4.[mysqldum

MySQL中查询和展示LONGBLOB类型数据的技巧总结

《MySQL中查询和展示LONGBLOB类型数据的技巧总结》在MySQL中LONGBLOB是一种二进制大对象(BLOB)数据类型,用于存储大量的二进制数据,:本文主要介绍MySQL中查询和展示LO... 目录前言1. 查询 LONGBLOB 数据的大小2. 查询并展示 LONGBLOB 数据2.1 转换为十

springboot2.1.3 hystrix集成及hystrix-dashboard监控详解

《springboot2.1.3hystrix集成及hystrix-dashboard监控详解》Hystrix是Netflix开源的微服务容错工具,通过线程池隔离和熔断机制防止服务崩溃,支持降级、监... 目录Hystrix是Netflix开源技术www.chinasem.cn栈中的又一员猛将Hystrix熔

Go语言连接MySQL数据库执行基本的增删改查

《Go语言连接MySQL数据库执行基本的增删改查》在后端开发中,MySQL是最常用的关系型数据库之一,本文主要为大家详细介绍了如何使用Go连接MySQL数据库并执行基本的增删改查吧... 目录Go语言连接mysql数据库准备工作安装 MySQL 驱动代码实现运行结果注意事项Go语言执行基本的增删改查准备工作

Java调用Python脚本实现HelloWorld的示例详解

《Java调用Python脚本实现HelloWorld的示例详解》作为程序员,我们经常会遇到需要在Java项目中调用Python脚本的场景,下面我们来看看如何从基础到进阶,一步步实现Java与Pyth... 目录一、环境准备二、基础调用:使用 Runtime.exec()2.1 实现步骤2.2 代码解析三、

MySQL按时间维度对亿级数据表进行平滑分表

《MySQL按时间维度对亿级数据表进行平滑分表》本文将以一个真实的4亿数据表分表案例为基础,详细介绍如何在不影响线上业务的情况下,完成按时间维度分表的完整过程,感兴趣的小伙伴可以了解一下... 目录引言一、为什么我们需要分表1.1 单表数据量过大的问题1.2 分表方案选型二、分表前的准备工作2.1 数据评估

Python中的filter() 函数的工作原理及应用技巧

《Python中的filter()函数的工作原理及应用技巧》Python的filter()函数用于筛选序列元素,返回迭代器,适合函数式编程,相比列表推导式,内存更优,尤其适用于大数据集,结合lamb... 目录前言一、基本概念基本语法二、使用方式1. 使用 lambda 函数2. 使用普通函数3. 使用 N

SQL Server 查询数据库及数据文件大小的方法

《SQLServer查询数据库及数据文件大小的方法》文章介绍了查询数据库大小的SQL方法及存储过程实现,涵盖当前数据库、所有数据库的总大小及文件明细,本文结合实例代码给大家介绍的非常详细,感兴趣的... 目录1. 直接使用SQL1.1 查询当前数据库大小1.2 查询所有数据库的大小1.3 查询每个数据库的详

python之uv使用详解

《python之uv使用详解》文章介绍uv在Ubuntu上用于Python项目管理,涵盖安装、初始化、依赖管理、运行调试及Docker应用,强调CI中使用--locked确保依赖一致性... 目录安装与更新standalonepip 安装创建php以及初始化项目依赖管理uv run直接在命令行运行pytho