类型转换函数

l  CAST ( expression AS data_type)

l  CONVERT ( data_type, expression,[style])

l  Select ‘您的班级编号’+ 1  错误这里+是数学运算符

SELECT FIdNumber,

CAST(RIGHT(sNo,3) AS INTEGER) as 后三位的整数形式,

CAST(RIGHT(sNo,3) AS INTEGER)+1 as 后三位加1,

CONVERT(INTEGER,RIGHT(sNo,3))/2 as 后三位除以2

FROM student

l  对编号排序,但编号是字符串类型。1、2、11、3、21、36…

l  对日期的转换。转换成各种国家格式的日期。

  • selectconvert(varchar(20),getdate(),104)
  • Style的格式,查sql帮助。(输入convert函数查询)
  • 将日期转换为指定格式的字符串。日期→字符串

Cast(‘1’ as int)

Convert(INT,‘123’)

Convert(nvarchar,getdate(),120)//Convert可以指定转换的风格

 

+号只有两边都是字符串 才会连接字符 只要有一边是数值类型的 会将另外一

边尝试转换 转换失败就报错

 

联合结果集union(集合运算符)

l  集合运算符是对两个集合操作的,两个集合必须具有相同的列数,列具有相同的数据类型(至少能隐式转换的),最终输出的集合的列名由第一个集合的列名来确定。(可以用来连接多个结果)

l  联合(union)与连接(join)不一样

l  Union 是合并结果集 会去掉重复的行(所有列相同)

l  简单的结果集联合(老师、学生):

  • select tName,tSex from teacher union
  • select sName,sSex from student

l  基本的原则:每个结果集必须有相同的列数;每个结果集的列必须类型相容。 或者满足自动转换条件

  • select tName,tSex,-1 from teacher union
  • select sName,sSex,sClassId from student

l 联合:将多个结果集合并成一个结果集。union(去除重复,相当于默认应用了distinct)union all(不会去除重复的行)

常见应用:底部汇总。

  • select tName,tSex from teacher union
  • select sName,sSex from student

UNION合并两个查询结果集,并且将其中完全重复的数据行合并为一条

  • select tName,tSex from teacher union all
  • select sName,sSex from student

Union因为要进行重复值扫描,所以效率低,因此如果不是确定要合并重复行,那么就用UNION ALL

--在使用union连接数据的时候,必须保证对应的列的数据类型是一致的,

--如果数据类型不一致,则报错。

--类型转换:cast() convert()

底部有统计总人数功能(在结果集里面仔添加一行)

Select * from Classer

Union all

Select (‘总人数’,‘2333’,getdate())

l  查询每位老师的信息,包括姓名、工资,并且在最后一行加上平均工资和最高工资

l  底部汇总:

select Name,Salary from Teacher

union all

select '平均工资',avg(Salary) from Teacher

union all

select '最高工资',Max(Salary) from Teacher

 

*一次插入多条数据

l  --把现有表的数据插入到新表(表不能存在),为表建备份。

l  --select * into newStudent from student(newStudent表在select查询的同时自动建立。)新表在执行语句之前 不存在,在select查询的同时自动建立

  • --把现有表的数据复制到一个已存在的表
  • 通过这种方式复制,只能复制表中的数据,以及列的名字和数据类型。对于约束,不会复制过来。

l  Select * into newTbl from oldTbl where 1<>1,这样做可以只复制表结构,但效率并不高。建议:select top 0 * into newTbl from oldTbl

l  --insert into backupStudent select * from students(backupStudent表必须提前建好,注意列对应 数据类型要一致)

l  可以通过导入导出数据为两张表导入导出数据

 

字符串函数(*)

l  LEN() :计算字符串长度(字符的个数。)len(‘asdf’)4   len(‘我爱中国’)  4

l  datalength();//计算字符串所占用的字节数,不属于字符串函数。

  • 测试varchar变量与nvarchar变量存储字符串a的区别。见备注1.

l  LOWER() 、UPPER () :转小写、大写

l  LTRIM():字符串左侧的空格去掉

l  RTRIM () :字符串右侧的空格去掉

l  LTRIM(RTRIM('         bb        '))

l  LEFT()、RIGHT()  截取取字符串

  • SELECT LEFT('abcdefg',2) //从0开始截取2个字符

l  SUBSTRING(string,start_position,length),索引从1开始。没有0

参数string为主字符串,start_position为子字符串在主字符串中的起始位置,length为子字符串的最大长度。SELECT  SUBSTRING('abcdef111',2,3)

尝试使用SQLServer的帮助。

 

 

日期函数(重点)

GETDATE() :取得当前日期时间

DATEADD (datepart , number, date ),计算增加以后的日期。参数date为待计算的日期;参数number为增量;参数datepart为计量单位,可选值见备注。DATEADD(DAY, 3,date)为计算日期date的3天后的日期,而DATEADD(MONTH ,-8,date)为计算日期date的8个月之前的日期 。(入职一年以上的员工发1000$)

DATEADD(Day,1,getdate())//第一个参数指的是加的的部分(day,month,year,mm

,ss如果要减 就加个负数

DATEDIFF ( datepart , startdate , enddate ) :计算两个日期之间的差额。 datepart 为计量单位,可取值参考DateAdd。

l  统计不同入学年数的学生个数:

  • select DateDiff(year,sInDate,getdate()),count(*) from student Group by DateDiff(year,sInDate,getdate())

DATEPART (datepart,date):返回一个日期的特定部分 //分钟那些都有

l  Month()、year()、day()来代替。//分钟那些没有

 

l  统计学生的生日年份个数:

  • select DatePart(year,sBirthday),count(*)
  • from student
  • group by DatePart(year, sBirthday)

l  1990年出生的人的个数? Select count(*) from P where year(birthday)=1990

Datepart可选值

取值                  别名                            说明

Year                   yy,yyyy                         年份

quarter             qq,q                             季度

month               mm,m                         月份

dayofyear         dy,y                             当年度的第几天

day                      dd,d                             日

week                  wk,ww                        当年度的第几周

weekday           dw,w                            星期几

hour                   hh                                 小时

minute              mi,n                             分

second              ss,s                              秒

millisecond       ms                                毫秒

日期部分 缩写 yearyy, yyyyquarterqq, qmonthmm, mdayofyeardy, ydaydd, dweekwk, wwweekdaydw, whourhhminutemi, nsecondss, smillisecondms

 

 

 

 

 

 

posted on 2013-01-03 00:09  陈谨  阅读(159)  评论(0编辑  收藏  举报