T-SQL 数据类型
在SQL Server 中,每个列、局部变量、表达式和参数都具有一个相关的数据类型。特别是列,数据类型是列(字段)最重要的属性之一,代表了数据的格式。数据类型的出现是为了规范存储和使用数据。SQL Server 的数据类型可以分为系统数据类型和用户自定义数据类型两种。
(1) 系统数据类型
不同的数据库管理系统支持的数据类型略有差别,SQL Server 2008 提供的数据类型分为数字类型、货币类型、日期和时间类型、字符串数据类型、CLR数据类型、空间数据类型和其他数据类型。我们只介绍几种常用的数据类型。
A. 数字数据类型
数字数据包括正数、小数、分数和整数。在SQL Server 2008中,数字数据类型分为整型数字类型和非整型数字类型。非整型数子类型又分为精确数字类型和近似数字类型。数字数据类型说明如表4-1所示。
数据类型 | 描述 | ||
整型数字 | bigint | 长度为8个字节的大整型数字 | |
int | 长度为4个字节的标准整型数字 | ||
smallint | 长度为2个字节的小整型数字 | ||
tinyint | 长度为1个字节的微整型数字 | ||
非整型数字 | 精确数字 | decimal[(p[,s])] | p为精度,指定小数点左边和右边可以存储的十进制数字的最大个数。精度必须是从1到最大精度之间的值。最大精度为38。 p的默认值为18。s为小数位数,指定小数点右边可以存储的十进制数字的最大个数。s的默认值是0。p和s必须遵循规则:0≤s≤p。 例如:decimal(6,2) 表示小数点后有2位数字,小数点前4位数字的定点小数。 |
numeric [(p[,s])] | 同 decimal | ||
近似数字 | float[(n)] | 其中n为用于存储float数值尾数的位数(以科学计数法表示),如果指定了n,则它必须是介于1和3之间的某个值。n的默认值为53。不过,SQL Server 并不是直接将n 用于确定float 的存储长度,而是将n 进行如下对应:如果 1 ≤n ≤24 ,则将n 视为24,存储大小为4个字节。如果 25≤ n ≤53 ,则将n 视为53,存储大小为8个字节。 | |
real | 长度为4字节的浮点数字。 | ||
数字数据类型常量不需要用单引号括起来。例如,268 为int 型常量,198.25 为 decimal 或 numeric 型常量,101.5E 和 56.5E-2 为float 或real型常量。
B. 货币数据类型
在SQL Server2008 中可以使用money 和 smallmoney 两种数据类型能够存储货币数据或货币值,这些数据类型可以使用常用的货币符号,如美元符号($)、人民币符号(¥)等。货币数据存储的精度固定为4位小数,它实际上是带有4位小数的decimal类型的数据。货币类型说明如表4-2所示。
数据类型 | 描述 |
money smallmoney | 长度为8字节的定点小数,精确到货币单位的千分之十 长度 长度为4个字节的定点小数,精确到货币单位的千分之十 |
货币类型常量可以包含小数点,但不能使用引号。如,$18和$542365.16 都是money 型常量。
C. 日期和时间数据类型
SQL Server2008 提供的日期时间类型包括datetime、 datetime2、date、datetimeoffset、smalldatetime和 time 。常用的日期时间型数据类型说明如4-3表所示。
数据类型 | 描述 |
datetime | 占8个字节。定义了结合24小时制时间的日期,其格式为YYYY-MM-DD hh:mm:ss[.nnn]。其中 YYYY为4位年份数字,MM为2位的月份数字,DD为2位的天数数字,hh 为2位的小时数,mm为2位的分钟数,ss 为2位的秒钟数字,[.nnn]表示秒的小数部分。 |
smalldatetime | 占4个字节。定义了范围和精度都相对较小的日期和时间类型,秒始终为零(:00),并且不带秒的小数部分。但这足以满足一般的记录日期和时间的需要,而且它比datetime 更节省空间。其格式为YYYY-MM-DD hh:mm:ss 。秒数小于或等于29.998秒的值向下舍入为最接近的分钟数;大于或等于29.999秒的值向上舍入为最接近的分钟数。精确度为1分钟。 |
date | 占3个字节。保存日期数据的数据类型,默认格式为YYYY-MM-DD |
time[(n)] | 占5个字节。保存时间数据的数据类型,它的精度可以达到100纳秒。其格式为 hh:mm:ss[.nnnnnnn]。n 为秒的小数部分指定数字的位数,可以是从0到7的整数。默认小数精度是7(100ns) |
日期和时间数据类型常量使用特定格式的字符日期值表示,并用单引号括起来。例如,’April 15 2000’ , ‘04/15/2009’ , ‘2013’-05-20 19:34:28’,20120527’。
例:将带秒数的字符串文字转化为 smalldatetime 。
SELECT CAST('2007-05-08 12:35:29’ AS smalldatetime),
CAST('2007-05-08 12:35:30’ AS smalldatetime),
CAST('2007-05-08 12:59:59.998’ AS smalldatetime),
执行结果如图所示:
图 执行结果
D. 字符串数据类型
字符串数据由字母、符号和数字组成。在SQL Server中,字符的编码方式有两种:ASCII码(普通编码)和Unicode码(统一编码)。 ASCII码指的是不同国家或地区的编码
长度不一样,比如,英文字母的编码是1个字节(8位),中文汉字的编码是2个字节(16位)。Unicode码是指不管哪个地区、哪种语言均采用双字节(16位)编码。常用的字符串数据类型的说明如表4-4所示。
数据类型 | 描述 | |
ASCII (普通编码) | char[(n)] | 长度为n 个字节的固定长度的非Unicode字符串数据类型。n的取值范围为1至8000,n的默认值为1。存储大小为 n个字节。当输入字符所占的空间小于n个字节时,系统自动在后边为其空格。 |
varchar[(n|max)] | 长度为n 个字节的可变长度的非Unicode字符串数据类型。n的取值范围为1至8000,n的默认值为1。Max指示最大存储大小是231-1个字节。在SQL Server2008中可以使用varchar(max)类型代替早期版本中的text类型存储大型文本数据。存储大小为输入数据的字节的实际长度,而不是n个字节。所输入的字符数据长度可以为0。 | |
Unicode (统一编码) | nchar[(n)] | 包含n个字符的固定长度的Unicode字符串数据类型。n的取值范围为1-4000,n的默认值为1。存储大小为2n个字节。当输入字符所占的空间小于2n个字节时,系统自动在后边为其补空格。 |
nvarchar[(n|max)] | 包含n个字符的固定长度的Unicode字符串数据类型。n的取值范围为1-4000,n的默认值为1。max指示最大存储大小是231-1字节。在SQL Server2008中可以使用nvarchar(max)类型代替早期版本中的ntext类型存储大型文本数据。存储大小为输入字符个数的两倍。 | |
二进制 | binary[(n)] | n 个字节固定长度的二进制字符数据。n的取值范围为1至8000。 |
varbinay[(n|max)] | n 个字节可变长度的二进制字符数据。n的取值范围为1至8000。max指示最大存储大小是unicode文件格式231-1字节。 | |
image | 可用来存储超过8000字节大小的可变长度的二进制字符数据,如Microfoft word文档,Microfoft Excel电子表格、位图图像、GIF文件和JPEG文件。 | |
字符串数据类型常量要用单引号括起来,例如,‘BOHAI University’。如果字符串包含单引号,则使用两个单引号表示该字符串中的单引号,例如,字符串I’m Tom 可以表示为 ‘I’’m Tom’ ,空字符串用中间没有任何字符的两个单引号表示 ‘’ 。
。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论