SQL Server 数据类型及示例
什么是数据类型?
SQL Server 中的数据类型定义了任何列或变量可以存储的数据类型。它是对象所持有的数据类型,例如整数、字符、字符串等。在创建任何表或变量时,除了指定名称外,您还需要设置它将存储的数据类型。
如何使用 MS SQL 数据类型
- 您需要提前定义列或变量可以存储的数据类型。确定数据类型还会限制用户输入任何意外或无效数据。
- 通过为变量或列分配适当的数据类型,可以有效地利用内存,这将仅为相应列的数据分配所需的系统内存量。
- MS SQL 提供广泛的基本 SQL 数据类型,以满足用户的需求,如日期、二进制图像等。
为什么要使用数据类型?
让我们以一个简单的网站应用程序注册页面为例。三个输入字段是名字、姓氏和联系电话。
这里我们应该注意到,在实际中
- “名字/姓氏”将始终是字母。
- “联系方式”将始终是数字。
- 从上图可以看出,将“名字/姓氏”定义为字符,将“联系方式”定义为整数是值得的。
显而易见,在任何应用程序中,所有字段都具有一种或另一种类型的数据。例如,数字、字母、日期等等。
另外,请注意,不同的数据类型有不同的内存需求。因此,为了有效地利用内存,最好为列或 变量 定义其将包含的数据类型。
MS SQL Server 中可用的数据类型
这是 MS SQL Server 数据类型列表
MS SQL server 支持以下数据类型类别
- 精确数字
- 近似数字
- 日期和时间
- 字符字符串
- Unicode 字符字符串
- 二进制字符串
- 其他数据类型
SQL 中的精确数字数据类型
精确数字在 SQL Server 中有九种子数据类型。
精确数字数据类型
数据类型 | 描述 | 下限 | 上限 | 内存 |
---|---|---|---|---|
bigint | 它存储指定范围内的整数 | −2^63 (−9,223,372, 036,854,775,808) | 2^63−1 (−9,223,372, 036,854,775,807) | 8 字节 |
int | 它存储指定范围内的整数 | −2^31 (−2,147, 483,648) | 2^31−1 (−2,147, 483,647) | 4 字节 |
smallint | 它存储指定范围内的整数 | −2^15 (−32,767) | 2^15 (−32,768) | 2 字节 |
tinyint | 它存储指定范围内的整数 | 0 | 255 | 1 字节 |
bit | 它可以取 0、1 或 NULL 值。 | 0 | 1 | 1 字节/8 位列 |
decimal | 用于小数点和固定精度数字 | −10^38+1 | 10^381−1 | 5 到 17 字节 |
numeric | 用于小数点和固定精度数字 | −10^38+1 | 10^381−1 | 5 到 17 字节 |
money | 用于货币数据 | −922,337, 203, 685,477.5808 | +922,337, 203, 685,477.5807 | 8 字节 |
smallmoney | 用于货币数据 | −214,478.3648 | +214,478.3647 | 4 字节 |
SQL Server 中的精确数字数据类型及示例
查询
DECLARE @Datatype_Int INT = 2 PRINT @Datatype_Int
输出
2
语法
Decimal (P,S)
此处,
- P 是精度
- S 是标度
查询
DECLARE @Datatype_Decimal DECIMAL (3,2) = 2.31 PRINT @Datatype_Decimal
输出
2.31
SQL 中的近似数字数据类型
SQL 近似数字类别包括浮点数和实数值。这些 SQL 数据类型主要用于科学计算。
近似数字数据类型
数据类型 | 描述 | 下限 | 上限 | 内存 | 精度 |
---|---|---|---|---|---|
float(n) | 用于浮点数 | −1.79E+308 | 1.79E+308 | 取决于 n 的值 | 7 位数字 |
real | 用于浮点数 | −3.40E+38 | 3.40E+38 | 4 字节 | 15 位数字 |
Syntax: FLOAT [(n)]
这里,n 是在科学计数法中用于存储 float 数的尾数的位数。默认情况下,n 的值为 53。
当用户定义 float 等数据类型时,n 必须是 1 到 53 之间的值。
SQL Server 将 n 视为两个可能值之一。如果 1<=n<=24,则 n 被视为 24。如果 25<=n<=53,则 n 被视为 53。
示例查询
DECLARE @Datatype_Float FLOAT(24) = 22.1234 PRINT @Datatype_Float
输出
22.1234
SQL 中的日期和时间数据类型
它存储日期和时间类型的数据。
日期和时间数据类型
数据类型 | 描述 | 存储大小 | 准确性 | 下限范围 | 上限范围 |
---|---|---|---|---|---|
DateTime | 用于指定从 1753 年 1 月 1 日到 9999 年 12 月 31 日的日期和时间。其精度为 3.33 毫秒。 | 8 字节 | 四舍五入到 .000、.003、.007 的增量 | 1753-01-01 | 9999-12-31 |
smalldatetime | 用于指定从公元 1 年 1 月 1 日到 9999 年 12 月 31 日的日期和时间。其精度为 100 纳秒 | 4 字节,固定 | 1 分钟 | 1900-01-01 | 2079-06-06 |
date | 用于仅存储从公元 1 年 1 月 1 日到 9999 年 12 月 31 日的日期 | 3 字节,固定 | 1 天 | 0001-01-01 | 9999-12-31 |
time | 用于仅存储时间值,精度为 100 纳秒。 | 5 字节 | 100 纳秒 | 00:00:00.0000000 | 23:59:59.9999999 |
datetimeoffset | 与 datetime 类似,但具有时区偏移量 | 10 字节 | 100 纳秒 | 0001-01-01 | 9999-12-31 |
datetime2 | 用于指定从公元 1 年 1 月 1 日到 9999 年 12 月 31 日的日期和时间 | 6 字节 | 100 纳秒 | 0001-01-01 | 9999-12-31 |
示例查询
DECLARE @Datatype_Date DATE = '2030-01-01' PRINT @Datatype_Date
输出
‘2030-01-01’
SQL 中的字符字符串数据类型
此类别与字符类型相关。它允许用户定义可以具有固定和可变长度的字符的数据类型。它有四种数据类型。以下是字符字符串 SQL Server 数据类型及其示例。
字符字符串数据类型
数据类型 | 描述 | 下限 | 上限 | 内存 |
---|---|---|---|---|
char | 它是一个固定宽度的字符串。最多存储 8,000 个字符。 | 0 个字符 | 8000 个字符 | n 字节 |
varchar | 这是一个可变宽度的字符串 | 0 个字符 | 8000 个字符 | n 字节 + 2 字节 |
varchar (max) | 这是一个可变宽度的字符串。最多存储 1,073,741,824 个字符。 | 0 个字符 | 2^31 个字符 | n 字节 + 2 字节 |
text | 这是一个可变宽度的字符串。最多存储 2GB 的文本数据。 | 0 个字符 | 2,147,483,647 个字符 | n 字节 + 4 字节 |
示例查询
DECLARE @Datatype_Char VARCHAR(30) = 'This is Character Datatype' PRINT @Datatype_Char
输出
这是字符数据类型
SQL 中的 Unicode 字符字符串数据类型
此类别存储完整的 Unicode 字符范围,使用 UTF-16 字符编码。
Unicode 字符字符串数据类型
数据类型 | 描述 | 下限 | 上限 | 内存 |
---|---|---|---|---|
nchar | 它是一个固定宽度的 Unicode 字符串 | 0 个字符 | 4000 个字符 | 2 乘以 n 字节 |
nvarchar | 它是一个可变宽度的 Unicode 字符串 | 0 个字符 | 4000 个字符 | 2 乘以 n 字节 + 2 字节 |
ntext | 它是一个可变宽度的 Unicode 字符串 | 0 个字符 | 1,073,741,823 个字符 | 字符串长度的 2 倍 |
示例查询
DECLARE @Datatype_nChar VARCHAR(30) = 'This is nCharacter Datatype' PRINT @Datatype_nChar
输出
这是 NCHAR 字符数据类型
SQL 中的二进制字符串数据类型
此类别包含固定和可变长度的二进制字符串。
二进制字符串数据类型
数据类型 | 描述 | 下限 | 上限 | 内存 |
---|---|---|---|---|
binary | 它是一个固定宽度的二进制字符串。最多存储 8,000 字节。 | 0 字节 | 8000 字节 | n 字节 |
varbinary | 这是一个可变宽度的二进制字符串。最多存储 8,000 字节 | 0 字节 | 8000 字节 | 实际输入数据长度 + 2 字节 |
image | 这是一个可变宽度的二进制字符串。最多存储 2GB。 | 0 字节 | 2,147,483,647 字节 |
示例查询
DECLARE @Datatype_Binary BINARY(2) = 12; PRINT @Datatype_Binary
输出
0x000C
SQL 中的其他数据类型
这些是其他不同的 SQL Server 数据类型,描述如下:
数据类型 | 描述 |
---|---|
Cursor | 其输出是 sp_cursor_list 和 sp_describe_cursor 的列。 它返回游标变量的名称。 |
Row version | 它为表行添加版本戳。 |
Hierarchyid | 此数据类型表示层次结构中的一个位置 |
Uniqueidentifier | 从字符表达式转换。 |
Sql_variant | 它存储 SQL Server 支持的数据类型的值。 |
XML | 它将 XML 数据存储在列中。 |
Spatial Geometry 类型 | 它在平面坐标系中表示数据。 |
Spatial Geography 类型 | 它在圆形地球坐标系中表示数据。 |
table | 它存储结果集以供后续处理。 |
有趣的事实!
- CHAR 数据类型 在检索数据时比 SQL VARCHAR 数据类型更快。
摘要
- 表中的每一列都在创建表时定义了其数据类型。
- 有六个主要类别和一个其他杂项类别。其他杂项类别有九个子类别,提供 SQL server 数据类型和大小。