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();
上述查询将返回当前日期和时间。