1. MSSQL 常用数据类型
在 MSSQL 中,数据类型是指存储数据的类型。选择正确的数据类型是设计数据库的重要组成部分。MSSQL 提供了各种数据类型,包括数值型、字符型、日期时间型、布尔型等。下面分别介绍几种常用的数据类型:
1.1 数值型
数值型数据类型可以存储数值。常用的数值型数据类型有:
整型:存储整数,包括 tinyint、smallint、int 和 bigint。
浮点型:存储小数,包括 real 和 float。
十进制型:存储精确数字,包括 decimal 和 numeric。
下面以 decimal 和 numeric 为例进行说明:
decimal 和 numeric 没有区别。他们都是精确数字类型,可以指定数据的精度(位数)和小数位数。例如,指定一个字段为 decimal(5, 2) 表示该字段总共有 5 位数字,其中 2 位小数:
CREATE TABLE Product (
ID INT PRIMARY KEY NOT NULL,
Price DECIMAL(5, 2) NOT NULL
);
上面的代码创建了一个名为 Product 的表,包括 ID 和 Price 两个字段。Price 字段的数据类型为 decimal,精度为 5,小数位为 2。
1.2 字符型
字符型数据类型可以存储文本字符串。常用的字符型数据类型有:
char 和 varchar:存储固定长度和可变长度的字符串,分别占据 n 个字节(char(n))和 1~n 个字节(varchar(n))。
nchar 和 nvarchar:存储 Unicode 字符串,分别占据 n*2 个字节(nchar(n))和 2~n*2 个字节(nvarchar(n))。
text 和 ntext:存储大量文本数据,分别可以存储 2^31-1 个字符和 2^30-1 个 Unicode 字符。
下面以 varchar 和 nvarchar 为例进行说明:
varchar 和 nvarchar 的区别在于存储的字符集不同,varchar 存储非 Unicode 字符集的字符串,而 nvarchar 存储 Unicode 字符集的字符串。对于大部分中文字符而言,nvarchar 会占用更多的存储空间。
CREATE TABLE Employee (
ID INT PRIMARY KEY NOT NULL,
Name VARCHAR(50) NOT NULL,
Address NVARCHAR(200) NOT NULL,
Note NVARCHAR(MAX) NULL
);
上面的代码创建了一个名为 Employee 的表,包括 ID、Name、Address 和 Note 四个字段。Name 的数据类型为 varchar,长度为 50,Address 的数据类型为 nvarchar,长度为 200,Note 的数据类型为 nvarchar,长度为最大。
1.3 日期时间型
日期时间型数据类型可以存储日期时间信息。常用的日期时间型数据类型有:
datetime:存储日期和时间,精确到秒钟,范围是 1753 年 1 月 1 日到 9999 年 12 月 31 日。
smalldatetime:存储日期和时间,精确到分钟,范围是 1900 年 1 月 1 日到 2079 年 6 月 6 日。
date:存储日期,范围是 0001 年 1 月 1 日到 9999 年 12 月 31 日。
time:存储时间,范围是 00:00:00 到 23:59:59.9999999。
下面以 datetime 和 date 为例进行说明:
datetime 类型需要占据 8 个字节的存储空间,date 类型需要占据 3 个字节的存储空间。
CREATE TABLE Order (
ID INT PRIMARY KEY NOT NULL,
OrderDate DATETIME NOT NULL,
DeliveryDate DATE NOT NULL
);
上面的代码创建了一个名为 Order 的表,包括 ID、OrderDate 和 DeliveryDate 三个字段。OrderDate 的数据类型为 datetime,DeliveryDate 的数据类型为 date。
1.4 布尔型
布尔型数据类型可以存储布尔值(True 或 False)。在 MSSQL 中,布尔型数据类型用 bit 来实现。bit 类型可以存储 0 和 1。
CREATE TABLE Employee (
ID INT PRIMARY KEY NOT NULL,
IsManager BIT NOT NULL
);
上面的代码创建了一个名为 Employee 的表,包括 ID 和 IsManager 两个字段。IsManager 的数据类型为 bit。
2. 数据类型的转换
在 MSSQL 中,如果需要将一种数据类型转换为另一种数据类型,则可以使用 CAST 或 CONVERT 函数。
2.1 CAST 函数
CAST 函数将某个表达式强制转换为指定的数据类型。CAST 函数的语法如下:
CAST( expression AS data_type )
其中,expression 是要转换的表达式,data_type 是要转换成的数据类型。下面以将 char 类型转换成 int 类型为例:
SELECT CAST('123' AS INT);
上面的代码将字符串 '123' 转换成 int 类型。
2.2 CONVERT 函数
CONVERT 函数与 CAST 函数类似,也可以进行数据类型转换。CONVERT 函数的语法如下:
CONVERT ( data_type [(length)], expression [,style] )
其中,data_type 是要转换成的数据类型,length 是可选参数,表示字符串类型的长度,expression 是要转换的表达式,style 是可选参数,表示转换样式。下面以将 datetime 类型转换成字符串类型为例:
SELECT CONVERT(VARCHAR(10), GETUTCDATE(), 120);
上面的代码将当前 UTC 时间转换成字符串类型,格式为 'yyyy-mm-dd'。
3. 数据类型的比较
在 MSSQL 中,可以使用比较运算符对数据进行比较。比较运算符返回一个布尔值(True 或 False)。常用的比较运算符有:
=:等于
>:大于
<:小于
>=:大于或等于
<=:小于或等于
<> 或 !=:不等于
下面以比较数值型和字符型数据为例进行说明:
3.1 数值型数据的比较
下面以比较两个数值型变量的大小为例:
DECLARE @value1 INT = 10;
DECLARE @value2 INT = 20;
SELECT @value1 > @value2;
上面的代码比较了 @value1 和 @value2 两个变量的大小。由于 @value1 小于 @value2,因此返回 False。
3.2 字符型数据的比较
下面以比较两个字符串变量的大小为例:
DECLARE @string1 VARCHAR(10) = 'abc';
DECLARE @string2 VARCHAR(10) = 'def';
SELECT @string1 > @string2;
上面的代码比较了 @string1 和 @string2 两个变量的大小。由于在 ASCII 码表中,'a' 的数值为 97,'d' 的数值为 100,因此 @string1 大于 @string2,返回 False。
4. 数据类型的转换和比较的应用
数据类型的转换和比较在实际应用中非常常见。下面以实际场景为例进行说明。
4.1 商品价格比较
在电商网站中,经常需要对商品价格进行比较。下面以 MSSQL 中的 Product 表为例进行说明:
CREATE TABLE Product (
ID INT PRIMARY KEY NOT NULL,
Price DECIMAL(5, 2) NOT NULL
);
INSERT INTO Product VALUES (1, 9.99), (2, 19.99), (3, 29.99), (4, 39.99);
上面的代码创建了一个名为 Product 的表,包括 ID 和 Price 两个字段。Price 的数据类型为 decimal,精度为 5,小数位为 2。
下面以比较商品价格为例,查询价格低于 20 元的商品:
SELECT ID FROM Product WHERE Price < 20;
上面的代码查询 Product 表中价格低于 20 元的商品,返回 ID 为 1 的记录。
4.2 文章发布时间过滤
在博客网站中,经常需要根据文章发布时间进行过滤。下面以 MSSQL 中的 Article 表为例进行说明:
CREATE TABLE Article (
ID INT PRIMARY KEY NOT NULL,
Title NVARCHAR(100) NOT NULL,
Content NVARCHAR(MAX) NOT NULL,
PublishTime DATETIME NOT NULL
);
上面的代码创建了一个名为 Article 的表,包括 ID、Title、Content 和 PublishTime 四个字段。PublishTime 的数据类型为 datetime。
下面以查询 2022 年 1 月发布的文章为例:
SELECT Title FROM Article WHERE YEAR(PublishTime) = 2022 AND MONTH(PublishTime) = 1;
上面的代码查询 Article 表中 2022 年 1 月发布的文章,返回符合条件的记录。
4.3 用户年龄统计
在某些网站中,需要统计用户的年龄。下面以 MSSQL 中的 User 表为例进行说明:
CREATE TABLE User (
ID INT PRIMARY KEY NOT NULL,
Name NVARCHAR(50) NOT NULL,
Birthday DATETIME NOT NULL
);
上面的代码创建了一个名为 User 的表,包括 ID、Name 和 Birthday 三个字段。Birthday 的数据类型为 datetime。
下面以查询年龄大于 18 岁的用户为例:
SELECT Name FROM User WHERE DATEDIFF(YEAR, Birthday, GETDATE()) > 18;
上面的代码查询 User 表中年龄大于 18 岁的用户,返回符合条件的记录。
5. 总结
本文介绍了 MSSQL 中常用的数据类型,并对数据类型的转换和比较进行了详细的说明。在实际开发中,正确选择数据类型是设计数据库的重要组成部分。同时,数据类型的转换和比较也是实现功能的重要手段。