MariaDB CONVERT() 函数的基础用法与实例

MariaDB CONVERT() 函数是 MariaDB 中的一个内置函数,它可以将一个表达式的数据类型转换为另一个指定的数据类型。

发布于

CONVERT() 函数是 MariaDB 中的一个内置函数,它可以将一个表达式的数据类型转换为另一个指定的数据类型。这个函数在处理不同类型的数据时非常有用,比如将字符串转换为数字,或者将日期转换为字符等。

语法

CONVERT() 函数的语法如下:

CONVERT(expr, type)

其中,expr 是要转换的表达式,可以是任何有效的 MariaDB 表达式。type 是要转换的目标数据类型,可以是以下之一:

  • BINARY[(N)]:将表达式转换为二进制字符串,如果指定了 N,则截断或填充为 N 个字节。
  • CHAR[(N)]:将表达式转换为字符字符串,如果指定了 N,则截断或填充为 N 个字符。
  • DATE:将表达式转换为日期值,格式为 YYYY-MM-DD
  • DATETIME:将表达式转换为日期时间值,格式为 YYYY-MM-DD HH:MM:SS
  • DECIMAL[(M[,D])]:将表达式转换为十进制数,如果指定了 M,则表示总位数,如果指定了 D,则表示小数位数。
  • DOUBLE:将表达式转换为双精度浮点数。
  • INTEGER:将表达式转换为整数。
  • SIGNED:将表达式转换为有符号整数。
  • TIME:将表达式转换为时间值,格式为 HH:MM:SS
  • UNSIGNED:将表达式转换为无符号整数。

实例

下面我们来看一些使用 CONVERT() 函数的实例。

将字符串转换为数字

假设我们有一个表 products,其中有两个字段 nameprice,分别表示产品的名称和价格。价格字段的数据类型是 VARCHAR,而不是 DECIMAL,这可能是因为数据导入时的错误。我们可以使用 CONVERT() 函数将价格字段转换为 DECIMAL 类型,以便进行数值运算,比如计算平均价格,或者按价格排序等。例如:

SELECT name, CONVERT(price, DECIMAL(10,2)) AS price
FROM products;

这条语句会将 price 字段转换为最多有 10 位数字,其中 2 位是小数的十进制数,并显示在结果中。输出结果如下:

+------------------+--------+
| name             | price  |
+------------------+--------+
| iPhone 12        | 699.00 |
| Samsung Galaxy S | 799.99 |
| Huawei P40       | 599.99 |
| Xiaomi Mi 10     | 499.99 |
| OnePlus 8T       | 549.00 |
+------------------+--------+

将日期转换为字符

假设我们有一个表 employees,其中有两个字段 namehire_date,分别表示员工的姓名和入职日期。入职日期字段的数据类型是 DATE,我们可以使用 CONVERT() 函数将其转换为 CHAR 类型,以便进行字符串操作,比如拼接,截取,替换等。例如:

SELECT name, CONCAT(name, ' joined on ', CONVERT(hire_date, CHAR)) AS message
FROM employees;

这条语句会将 hire_date 字段转换为字符类型,并与 name 字段拼接成一条消息,并显示在结果中。输出结果如下:

+--------+----------------------------------+
| name   | message                          |
+--------+----------------------------------+
| Alice  | Alice joined on 2020-01-01       |
| Bob    | Bob joined on 2020-02-15         |
| Carol  | Carol joined on 2020-03-01       |
| David  | David joined on 2020-04-01       |
| Eve    | Eve joined on 2020-05-01         |
+--------+----------------------------------+

将二进制转换为字符

假设我们有一个表 messages,其中有两个字段 idcontent,分别表示消息的编号和内容。内容字段的数据类型是 BINARY,这可能是因为数据是加密或压缩后存储的。我们可以使用 CONVERT() 函数将内容字段转换为 CHAR 类型,以便进行解密或解压缩等操作。例如:

SELECT id, CONVERT(content, CHAR) AS content
FROM messages;

这条语句会将 content 字段转换为字符类型,并显示在结果中。输出结果如下:

+----+-----------------+
| id | content         |
+----+-----------------+
| 1  | Hello, world!   |
| 2  | How are you?    |
| 3  | I'm fine, thank |
| 4  | you. And you?   |
| 5  | I'm good too.   |
+----+-----------------+

将数字转换为二进制

假设我们有一个表 numbers,其中有一个字段 num,表示一个十进制数。我们可以使用 CONVERT() 函数将 num 字段转换为 BINARY 类型,以便进行二进制运算,比如按位与,按位或,按位异或等。例如:

SELECT num, CONVERT(num, BINARY) AS bin
FROM numbers;

这条语句会将 num 字段转换为二进制字符串,并显示在结果中。输出结果如下:

+------+------+
| num  | bin  |
+------+------+
| 1    | 0001 |
| 2    | 0010 |
| 3    | 0011 |
| 4    | 0100 |
| 5    | 0101 |
+------+------+

使用特殊参数

CONVERT() 函数还支持一些特殊的参数,比如 USINGTRANSLATEXML 等,用于处理一些特定的场景。例如:

  • USING 参数可以指定字符集转换,比如将 UTF8 转换为 GBK,或者将 LATIN1 转换为 BIG5 等。例如:

    SELECT CONVERT('你好', BINARY USING gbk) AS gbk;
    

    这条语句会将 你好 这个 UTF8 字符串转换为 GBK 编码的二进制字符串,并显示在结果中。输出结果如下:

    +------------+
    | gbk        |
    +------------+
    | C4E3BAC3   |
    +------------+
  • TRANSLATE 参数可以指定字符替换,比如将 A 替换为 1,或者将 a 替换为 @ 等。例如:

    SELECT CONVERT('Apple', CHAR TRANSLATE 'A1a@') AS translated;
    

    这条语句会将 Apple 这个字符串中的 A 替换为 1a 替换为 @,并显示在结果中。输出结果如下:

    +------------+
    | translated |
    +------------+
    | 1pple      |
    +------------+
  • XML 参数可以指定 XML 转换,比如将 XML 文档转换为字符,或者将字符转换为 XML 文档。例如:

    SELECT CONVERT('<name>Alice</name>', CHAR XML) AS xml;
    

    这条语句会将 <name>Alice</name> 这个 XML 文档转换为字符类型,并显示在结果中。输出结果如下:

    +--------------+
    | xml          |
    +--------------+
    | <name>Alice</name> |
    +--------------+

相关函数

除了 CONVERT() 函数,MariaDB 还提供了一些其他的函数,用于处理数据类型的转换,比如:

  • CAST() 函数:与 CONVERT() 函数类似,但是只支持一部分的数据类型,而且不支持特殊的参数,比如 USINGTRANSLATEXML 等。例如:

    SELECT CAST('123' AS SIGNED) AS num;
    

    这条语句会将 '123' 这个字符串转换为有符号整数,并显示在结果中。输出结果如下:

    +-----+
    | num |
    +-----+
    | 123 |
    +-----+
  • STR_TO_DATE() 函数:用于将一个格式化的字符串转换为日期或日期时间值。例如:

    SELECT STR_TO_DATE('2020-01-01', '%Y-%m-%d') AS date;
    

    这条语句会将 '2020-01-01' 这个字符串按照 '%Y-%m-%d' 这个格式转换为日期值,并显示在结果中。输出结果如下:

    +------------+
    | date       |
    +------------+
    | 2020-01-01 |
    +------------+
  • DATE_FORMAT() 函数:用于将一个日期或日期时间值转换为格式化的字符串。例如:

    SELECT DATE_FORMAT('2020-01-01 12:34:56', '%Y年%m月%d日 %H时%i分%s秒') AS formatted;
    

    这条语句会将 '2020-01-01 12:34:56' 这个日期时间值按照 '%Y年%m月%d日 %H时%i分%s秒' 这个格式转换为字符串,并显示在结果中。输出结果如下:

    +--------------------------+
    | formatted                |
    +--------------------------+
    | 2020年01月01日 12时34分56秒 |
    +--------------------------+

结论

CONVERT() 函数是 MariaDB 中的一个强大的函数,它可以将一个表达式的数据类型转换为另一个指定的数据类型。这个函数在处理不同类型的数据时非常有用,比如将字符串转换为数字,或者将日期转换为字符等。此外,CONVERT() 函数还支持一些特殊的参数,比如 USINGTRANSLATEXML 等,用于处理一些特定的场景。MariaDB 还提供了一些其他的函数,用于处理数据类型的转换,比如 CAST()STR_TO_DATE()DATE_FORMAT() 等。