必须会的SQL语句(五) NULL数据处理和类型转换

1. NULL数据处理

1.1 NULL概念

在SQL中,NULL表示缺失的或不适用的数据。它不同于空字符串或者0值,而是一种特殊的值。当字面量或表达式的值不存在或不适用时,就可以使用NULL来表示。例如,当某个字段没有值时,可以使用NULL来填充。

1.2 NULL的比较

在SQL中,使用比较运算符(如=、<、>)对NULL进行比较时,结果不是True或False,而是未知(Unknown)。例如:

SELECT NULL = NULL; -- 返回NULL

SELECT NULL <> NULL; -- 返回NULL

为了测试是否存在NULL值,可以使用IS NULL或IS NOT NULL运算符:

SELECT * FROM my_table WHERE col1 IS NULL;

SELECT * FROM my_table WHERE col1 IS NOT NULL;

1.3 NULL的处理

在进行数据处理时,常常需要处理NULL的情况。在SQL中,可以使用如下函数处理NULL值:

1.3.1 IFNULL

IFNULL函数接受两个参数,如果第一个参数不是NULL,则返回第一个参数;否则返回第二个参数。它相当于COALESCE的简化版。例如:

SELECT IFNULL(col1, 0) FROM my_table;

上述查询将返回col1列的值,如果col1列的值是NULL,则返回0。

1.3.2 COALESCE

COALESCE函数接受多个参数,它会从左往右依次判断参数的值,返回第一个非NULL值。例如:

SELECT COALESCE(col1, col2, col3, 'unknown') FROM my_table;

上述查询将返回col1、col2、col3列中的第一个非NULL值,如果所有列都是NULL,则返回'unknown'。

1.3.3 NULLIF

NULLIF函数接受两个参数,如果第一个参数等于第二个参数,则返回NULL,否则返回第一个参数。例如:

SELECT NULLIF(col1, 0) FROM my_table;

上述查询将返回col1列的值,如果col1列的值为0,则返回NULL。

2. 类型转换

2.1 CAST和CONVERT

在SQL中,可以使用CAST或CONVERT函数将一个数据类型转换为另一个数据类型。它们的用法相同,只是语法上稍有区别。例如:

SELECT CAST(col1 AS INT) FROM my_table;

SELECT CONVERT(INT, col1) FROM my_table;

上述查询将返回col1列的值,转换为整数类型。

2.2 数据类型

在SQL中,常用的数据类型包括:

整数型:INT、INTEGER、TINYINT、SMALLINT、BIGINT

浮点型:FLOAT、REAL、DOUBLE PRECISION

定点型:NUMERIC、DECIMAL

字符串型:CHAR、VARCHAR、TEXT

日期型:DATE、TIME、DATETIME、TIMESTAMP

布尔型:BOOLEAN

二进制型:BLOB、BIT、VARBINARY

2.3 示例

下面是一些SQL语句的示例,可以帮助理解NULL数据处理和类型转换:

2.3.1 示例1:将字符串转换为整数

SELECT CAST('123' AS INT);

上述查询将返回整数123。

2.3.2 示例2:将日期格式化为字符串

SELECT DATE_FORMAT('2022-01-01', '%Y年%m月%d日');

上述查询将返回字符串'2022年01月01日'。

2.3.3 示例3:将NULL值转换为默认值

SELECT COALESCE(col1, 0) FROM my_table;

上述查询将返回col1列的值,如果col1列的值是NULL,则返回0。

2.3.4 示例4:将多个值拼接为字符串

SELECT CONCAT(col1, ' - ', col2, ' - ', col3) FROM my_table;

上述查询将返回三列值拼接而成的字符串。

2.3.5 示例5:获取当前日期和时间

SELECT NOW();

上述查询将返回当前日期和时间。

数据库标签