一、局部变量

1、注意以下几点:

(1)声明变量必须用declare

(2)声明变量名前必须加@

(3)必须为变量指定数据类型和长度。如 declare  @rate   decimal(7,3)

(4)默认情况下,变量值为null

(5)可以在一个declare语句中声明多个变量并赋值,之间用逗号隔开。如declare  @rate  decimal(7,3)=3.14,@name  nvarchar(10) =‘圆周长’

(6)在其他地方(除了声明变量的赋初值)为变量赋值有两种方式:一是用set关键字,二是直接用select来赋值。前者一个set语句只能对一个变量赋值,后者一个select语句可以对多个变量赋值。但是select对多个变量赋值的限制是:赋值不能和检索操作同时进行。如下代码会产生错误

1 declare  @name varchar(50)
2 select prodId , @name=prodName + ':' + prodNum     --报错:向变量赋值的select语句不能与数据检索操作结合使用。
3 from Product

 

 

2、局部变量的作用域

  一般限制在一个批处理中(也可能是存储过程或者自定义函数等脚本)。对于多条普通sql语句,两个go语句之间的部分,就是变量声明的作用域。

在一个变量作用域范围内,不允许再声明另一个同名变量。

 

 

二、全局变量

  全局变量是SQLServer系统定义并赋值的一系列变量,我们只能使用(读取),而不能自己去定义和赋值。全局变量都是以@@为前缀的。

主要注意下面几个全局变量:

(1)@@error    返回最后执行的T-SQL语句的错误代码。没有错误值为0。

(2)@@rowcount  返回受上一语句影响的行数,任何不返回行的语句将这一变量设置为0。(就是说语句执行没有一行受影响的,返回0)

(3)@@identity  返回最后插入行的标识列的列值。

 

 

三、运算符

1、注意加运算符+

int类型的数字相加,也可以将数字以天为单位和日期相加。

1 --例如:
2 declare  @start  datetime =‘2017-9-23’,@adddays  int =5
3 select  @start - 1.25  as  ‘Start Date’ ,  -- 注意到1.25是一天外带6小时
4         @start  + @adddays  as  'Add Date'  --两个变量相加

日期时间可以很方便相加,意义重大,比如日程安排系统,指定加减多少天提醒。再比如统计某种商品在到今天为止的前X天销售情况。等等

 

2、注意比较运算符(=、>、<、<>等等)

比较运算符测试两个表达式是否相等。除了text 、ntext 、image数据类型的表达式外,比较运算符可以用于所有表达式。

 

四、字符串类型注意

如:char(n)、  nchar(n)、  varchar(n)、  nvarchar(n)

(1)字符串长度n的取值范围是1~8000

(2)如果未指定n,默认值为1。如果在用cast() 和 convert()函数时未指定n,则默认长度为30.

(3)如果列数据项的大小有差异,要使用可变长度,如varchar(n) 或 nvarchar(n)。若大小可能超过8000的,要使用 varchar(max)  或 nvarchar(max)

(4)如果数据量比较大,不建议使用text和ntext类型,而应该使用 varchar(max)  或 nvarchar(max)

(5)定长字符串如果字符不足规定的位数就用空格填充,这其实是很烦的特性。因为我们的应用程序从数据库读出字符串,还需要去除不需要的空格。 

 

五、数值类型注意

(1)整数数据类型:bigint:8字节;int:4字节;smallint:2字节;tinyint:1字节

(2)decimal类型:如decimal(10,3) 总共10个有效数字,其中小数点后保留3位有效数字。

decimal(p,s):p表示精度,即最多可以存储多少个有效数字(包括小数点左边和右边)。p取值范围是1~38,默认18

s表示小数位数,即小数点右边可以存储多少个有效数字。取值范围是0~p,默认0

 

(3)money数据类型:小数点之后只存4位有效数字。

 

 

六、时间日期类型注意

(1)尽量不要使用smalldatetime了,因为其最大值2079年。

(2)日期时间格式要求:

  <1>date类型  插入任何时间值,均会插入失败。  如插入'2017-9-24 12:00:00'   -- 报错

  <2>smalldatetime类型  插入任何秒的小数部分都会导致插入失败。如插入'2017-9-24 12:00:00.123'   -- 报错

  <3>datetime类型  插入任何秒的小数部分超过3位都会导致插入失败。如插入'2017-9-24 12:00:00.1234'   -- 报错

 

七、二进制类型注意

在编程中可以将文件转换为二进制再存入数据库,比如一张图片、一个文件等,但这不是推荐用法。微软推荐使用varbinary(max) 来代替Image数据类型。

(1)binary(n)和varbinary(n)中n取值范围是1~8000。超过8000长度的,要用(max)

 

八、内置函数

1、聚合函数

  聚合函数应用特定的聚合操作并返回一个标量值(单一值)。除了count以外,聚合函数都会忽略null值。聚合函数经常与select语句的group by子句一起使用。

  聚合函数只能在以下位置作为表达式使用:一、select语句的选择列表(子查询或外部查询)。二、having子句中。 

 

2、获取日期时间部分的函数

<1>datename(datepart , date)返回表示指定日期的指定datepart的字符串。如:select  datename(YY , '2017-9-24' )    --获得结果 '2017'

<2>datepart(datepart  ,  date)返回表示指定日期的指定datepart的整数。如:select  datepart(MM , '2017-9-24' )    --获得结果 9

<3>day(date)  、month(date)  、year(date) 都是返回整数

<4>datepart见下表

mysql 局部变量赋值 数据库局部变量赋值_mysql 局部变量赋值

 

 

3、获取日期和时间差值的函数

  datediff(datepart,startdate,enddate)返回两个指定时间日期之间所跨的日期或时间datepart边界的数目。返回int整数值。注意如果前面时间大,后面的时间小,返回值为负数。

1 select  datediff(dd , '2016-9-24' ,  '2017-9-24' )    --返回天数 356
2 ,  datediff(mm ,  '2016-9-24' ,  '2017-9-24' )    --返回月数12
3 ,  datediff(yy   ,  '2016-9-24' ,  '2017-9-24' )    --返回年数 1

 

 

4、字符串转数值函数

如:cast('123'  as  int)  返回整数123;又如convert(int , '123')返回结果相同。

有时候前者用起来更方便和自然。如果需要转换后以指定格式返回,可以使用后者。如:

select  convert( varchar(20) , getdate() , 101)  -- 101表示返回格式为mm/dd/yyyy