SQL Server 数据类型及示例

什么是数据类型?

SQL Server 中的数据类型定义了任何列或变量可以存储的数据类型。它是对象所持有的数据类型,例如整数、字符、字符串等。在创建任何表或变量时,除了指定名称外,您还需要设置它将存储的数据类型。

如何使用 MS SQL 数据类型

  • 您需要提前定义列或变量可以存储的数据类型。确定数据类型还会限制用户输入任何意外或无效数据。
  • 通过为变量或列分配适当的数据类型,可以有效地利用内存,这将仅为相应列的数据分配所需的系统内存量。
  • MS SQL 提供广泛的基本 SQL 数据类型,以满足用户的需求,如日期、二进制图像等。

为什么要使用数据类型?

让我们以一个简单的网站应用程序注册页面为例。三个输入字段是名字、姓氏和联系电话。

这里我们应该注意到,在实际中

  • “名字/姓氏”将始终是字母
  • “联系方式”将始终是数字
SQL Server Data Types
MS SQL 中的数据类型示例
  • 从上图可以看出,将“名字/姓氏”定义为字符,将“联系方式”定义为整数是值得的。

显而易见,在任何应用程序中,所有字段都具有一种或另一种类型的数据。例如,数字、字母、日期等等。

另外,请注意,不同的数据类型有不同的内存需求。因此,为了有效地利用内存,最好为列或 变量 定义其将包含的数据类型。

MS SQL Server 中可用的数据类型

这是 MS SQL Server 数据类型列表

MS SQL server 支持以下数据类型类别

  • 精确数字
  • 近似数字
  • 日期和时间
  • 字符字符串
  • Unicode 字符字符串
  • 二进制字符串
  • 其他数据类型
Data type available in MS SQL Server

MS SQL 数据类型

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_listsp_describe_cursor 的列。
它返回游标变量的名称。
Row version 它为表行添加版本戳。
Hierarchyid 此数据类型表示层次结构中的一个位置
Uniqueidentifier 从字符表达式转换。
Sql_variant 它存储 SQL Server 支持的数据类型的值。
XML 它将 XML 数据存储在列中。
Spatial Geometry 类型 它在平面坐标系中表示数据。
Spatial Geography 类型 它在圆形地球坐标系中表示数据。
table 它存储结果集以供后续处理。

有趣的事实!

摘要

  • 表中的每一列都在创建表时定义了其数据类型。
  • 有六个主要类别和一个其他杂项类别。其他杂项类别有九个子类别,提供 SQL server 数据类型和大小。