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.2 unicode 类型
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.2 unicode 类型
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 则视为 20 XX 年 , 如果大于 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