--> Title : T-SQL入门攻略之2-SQL数据类型
--> Author : wufeng4552
--> Date : 2010-03-22
SQL语言是一种关系数据库语言是面向非过程化的第四代语言(4GL),与其他语言一样SQL 也有自己的数据类型下面分别简单介绍
1:字符串型
1.1固定长度
1.1.1非unicode类型
declare @char char(10)
set @char='tsql'
select len(@char)
/*
-----------
4
(1 個資料列受到影響)
*/
select datalength(@char)
/*
-----------
10
(1 個資料列受到影響)
*/
1.1.2unicode类型
declare @char nchar(10)
set @char='tsql'
select len(@char)
/*
-----------
4
(1 個資料列受到影響)
*/
select datalength(@char)
/*
-----------
20
(1 個資料列受到影響)
*/
注意:从上面可以看出unicode都是以双字节存储
1.2可变长度
1.2.1非unicode类型
declare @char varchar(10)
set @char='tsql好'
select len(@char)
/*
-----------
5
(1 個資料列受到影響)
*/
select datalength(@char)
/*
-----------
6
(1 個資料列受到影響)
*/
注:以上可以发现汉字占2个字节,英文占1个字节
1.2.2unicode类型
declare @char nvarchar(10)
set @char='tsql好'
select len(@char)
/*
-----------
5
(1 個資料列受到影響)
*/
select datalength(@char)
/*
-----------
10
(1 個資料列受到影響)
*/
注:以上可以发现不管是汉字还是英文都占2字节
2:数值型
按照不同的精确程度,可分为精确型与近似型
2.1精确型
declare @b bit,@t tinyint,@s smallint,@i int,
@bi bigint,@n numeric(18,2),@d decimal(18,2)
select @b=999,@t=255,@s=999,@i=999,@bi=999,@n=999,@n=999
select @b,@t,@s
select @i,@bi,@n,@n
具體范围查看联机帮助
2.1近似型
Real
Float
具體范围查看联机帮助
3:日期型
Datetime
Smalldatetime
具體范围查看联机帮助
3.1常用日期输入格式
3.1.1英文+数字格式
在这种格式中月份可以是全名或者缩写,且不分大小写,且年份与月日之间不用逗号隔开,年份可以为4位或者2位,如果使用2位若其值小50则视为20XX年,如果大于50则视为19XX .
set language us_english
go
declare @dt datetime
set @dt='June 29 2008' --2008年月日
set @dt='June 29 08' --2008年月日
set @dt='June 29 99' --1999年月日
set @dt='2006 June 03' --2006年月日
select @dt
go
set language 繁體中文
3.1.2数字+分割符格式:允许把斜杠(/),连字符(-),小数点(.)作为用数字表示的年月日之间的分割符
declare @dt datetime
set @dt='2008/7/17' --2008年月日
set dateformat dmy
set @dt='3.5/2000' --2000年月日
set dateformat mdy
set @dt='3/5-2000' --2000年月日
select @dt
同时可以混合使用这些符号.如上,但是不提倡.
3.2常用时间输入格式
时间格式输入是固定的必须按照 小时:分钟:秒.毫秒
declare @dt datetime
set @dt='11:23:24.25'
set @dt='11:23:24.25AM' --12小時制AM上午
set @dt='11:23:24.25PM' --12小時制AM下午
select @dt
3.3设置系统的日期输入格式
系统默认的输入格式为M D Y 分表表示 月-日-年
具体看3.2.2示例
4:货币型
货币型是用来存储货币值数据,精确到小数点后面4位,可以认为是numric(m,n)特列,smallmoney,money型数据在MSSQL中与bigint ,int有相同的存储格式
因此也可以归为整数型数据类型。
declare @money money
set @money=$123.45677
select @money
/*
---------------------
123.4568
*/
由上面可以看出只能精确到小数点后4位,如果精度还不够只能用decimal()
Numeric()
5:二进制型
Binary(n) 固定長度
Varbinary(n) 可變長度
Image
6:其它类型
6.1 sql_variant 通用数据类型 可以代表出了text,ntext,timestamp他和他自身以外的所有类型
declare @sql_variant sql_variant
set @sql_variant=123
set @sql_variant='147258'
set @sql_variant=0XFFFF
--以下表示sql_variant不能代替text ntext...
declare @t table(test ntext)
insert @t select 'abc'
select @sql_variant=test from @t
/*
訊息206,層級16,狀態2,行7
運算元類型衝突: ntext 與sql_variant 不相容
*/
6.2 timestamp
时间戳类型 每次更新时候会自动该类型的数据,通常证明某一项活动是在某一时刻完成的。可以用@@dbts返回当前时间戳
select @@dbts
/*
------------------
0x0000000000001770
(1 個資料列受到影響)
*/
6.3 uniqueidentitier 全球唯一标识 可以用 newid()返回
select newid()
/*
------------------------------------
0597B18D-0D06-43A2-91CE-436C83B6B348
(1 個資料列受到影響)
*/
6.4 XML 该类型具有其他类型的所有功能还可以添加子树,删除子树,更新标量值得等。后续会讲到。
7:自定义类型
create type SN
from varchar(10) not null
--varchar(10) not null 与SN等價
go
create table test(name sn)
go
insert test select 10
drop table test
drop type sn