一、变量
1. 定义变量
DECLARE @number INT --定义一个名称为@number的变量,指定其类型为整数
DECLARE @number1 INT
2. 赋值变量
1)SET赋值
对单个变量赋值可以使用SET
set @number =1234--如果写SET @number ='XXXX'会报错,因为XXXX是字符串且无法隐式转换为数字
SET @number =DBO.FUN1(@number )--用标量值函数赋值
SET @number =(SELECT MAX(number) FROM TABLE1)--用子查询赋值
SET @number =@number1--用其它函数赋值
SET @number =@number1 * 6 + DBO.FUN1(@number )-(SELECT MAX(number) FROM TABLE1)--用表达式赋值
注:
① SET后的变量名称必须在本批次中已定义,大小写不限。
② =号后面可以写数字、字符、标量值函数、返回一行一列的子查询、其它变量、表达式等,但不能写存储过程。
③ =号后返回的数据类型必须与变量的数据相同,或能隐式转换成变量的数据类型。
2)SELECT赋值
DECLARE @str1 VARCHAR
DECLARE @str2 VARCHAR
SELECT @str1 ='XYZ'
SELECT @str1 ='XYZ',@str2 ='CC'--可多个变量同时赋值
SELECT @str1 = NAME, @str2 = NAME+'X'--可以用查询的结果集对变量赋值
FROM TABLE1
WHERE NAME LIKE '%%
3. 使用变量
变量可用的地方很多,在调试函数、存储过程、查询时都会用到,只要能用表达式的地方基本上都能用变量。
DECLARE @NUMBER INT--定义变量NUMBER
SET @NUMBER = 1--设置变量
SELECT @NUMBER --直接输出变量
SELECT DBO.FUN2(@NUMBER )--使用变量调试函数
EXEC PROC_TEST1 @NUMBER --使用变量作为存储过程的输入参数
SELECT *
FROM table1
WHERE clm1 > @NUMBER --查询中使用变量
UPDATE table1 SET clm1 =@NUMBER --更新中使用变量
WHERE COL1<>@I
二、数据类型
1. 整数
(1)int
int 的 SQL-92 同义字为 integer。
每个int存储在4个字节中,其中一个二进制位表示符号位,其它31个二进制位表示长度和大小。
可以表示-2的31次方~2的31次方-1范围内的所有整数。
(2)bigint
存储大小为 8 个字节。
数据类型用于整数值可能超过 int 数据类型支持范围的情况 。
在数据类型优先次序表中,bigint 介于 smallmoney 和 int 之间 。
(3)smallint
存储大小为 2 个字节。
(4)tinyint
存储大小为 1 字节。
2. 浮点
(1)float[(n)]
3. 字符
英文和数字占1个字节,中文占2个字节
(1)char(n)
固定长度
① 存入数据:当定义一个字段固定长度时,如果存进去数据长度小于char的长度,那么存入数据中数据所占的长度依然为定义字段长度,存入数据格式将变为存入数据加空格;
② 取数据:取出数据需要用trim()去掉多余的空格;
(2)VARCHAR(n|max)
使用比类型(char)占用更少存储空间(除了使用ROW_FORMAT=FIXED创建的MyISAM表)。
① 存入数据:如果存进去数据长度小于varchar的长度,那么存入数据中数据所占的长度为存入数据长度。
② 取数据:取出数据需要用trim()去掉多余的空格;
DECLARE @char1 char(10)
DECLARE @char2 char(10)
DECLARE @varhcar1 VARCHAR(10)
DECLARE @varhcar2 VARCHAR(10)
set @char1='sdf'
set @char2='wef'
set @varhcar1='abc'
set @varhcar2='dew'
select @char1 + @char2,len(@char1 + @char1)
select @char1 + @varhcar1,len(@char1 + @varhcar1)
select RTRIM(@char1) + @varhcar1,len(@char1 + @varhcar1)--去除右边空格再拼接
select @varhcar1 + @varhcar2,len(@varhcar1 + @varhcar2)
(3)nchar(n)
(4)nvarchar(n|max)
(5)Text
4.日期和时间
(1)DATE
存储用字符串表示的日期数据
范围:0001-01-01~9999-12-31(公元元年1月1日到公元9999年12月31日)间的任意日期值。
格式为“YYYY-MM-DD”:
YYYY:表示年份的四位数字,范围为0001~9999;
MM:表示指定年份中月份的两位数字,范围为01~12;
DD:表示指定月份中某一天的两位数字,范围为01~31(最高值取决于具体月份)
该数据类型占用3个字节的空间。
(2)TIME
以字符串形式记录一天的某个时间
范围:00:00:00.0000000~23:59:59.9999999
格式:“hh:mm:ss[.nnnnnnn]”:
(3)DATETIME
用于存储时间和日期数据
默认值:1900-01-01 00:00:00
范围:从1753年1月1日到9999年12月31日
当插入数据或在其它地方使用时,需用单引号或双引号括起来。可以使用“/”、“-”和“.”作为分隔符。该类型数据占用8个字节的空间。
(4)DATETIME2
默认格式:YYYY-MM-DD hh:mm:ss[.fractional seconds]
范围:0001-01-01~9999-12-31(公元元年1月1日到公元9999年12月31日).