sqlserver sql常用函数,语法

sqlserver sql常用函数,语法
--  返回一个表中所有的字段
select  name  from  syscolumns  where  id = object_id ( ' tb_usertable_online ' )
--  获取最近添加的标识列的值
set   @rs   =   @@identity
--  
print   len ( ' abcdef ' )
--  大小写转换
print   lower ( ' ABCDEF ' )
print   upper ( ' abcdef ' )
--  去空格
print   ltrim ( '  abcd dfd df  ' )
print   rtrim ( '  abcd dfd df  ' )
--  求绝对值
print   abs ( - 12 )

--  幂
--
 3 的 2 次方
print   power ( 3 , 2 )
print   power ( 3 , 3 )
--  随机数
--
 0 - 1000 之间的随机数
print   convert ( int , rand ()  *   10  )
--  获取圆周率
print   pi ()

--  获取系统时间
print   getdate ()

--  获取3天前的时间
print   dateadd ( day - 3  ,  getdate ())
--  获取3天后的时间
print   dateadd ( day 3  ,  getdate ())
--  获取3年前的时间
print   dateadd ( year - 3  ,  getdate ())
--  获取3年后的时间
print   dateadd ( year 3  ,  getdate ())

--  获取3月后的时间
print   dateadd ( month 3  ,  getdate ())
--  获取9小时后的时间
print   dateadd (hour,  9  ,  getdate ())
--  获取9分钟后的时间
print   dateadd (minute,  9  ,  getdate ())

--  获取指定时间之间相隔多少年
print   datediff ( year ' 2005-01-01 ' ' 2008-01-01 ' )
--  获取指定时间之间相隔多少月
print   datediff ( month ' 2005-01-01 ' ' 2008-01-01 ' )
--  获取指定时间之间相隔多少天
print   datediff ( day ' 2005-01-01 ' ' 2008-01-01 ' )

--  字符串合并
print   ' abc '   +   ' def '

print   ' abcder '

print   ' abc '   +   ' 456 '
print   ' abc '   +   456

--  类型转换
print   ' abc '   +   convert ( varchar ( 10 ),  456 )

select  title_id, type, price  from  titles
--  字符串连接必须保证类型一致(以下语句执行将会出错)
--
 类型转换
select  title_id  +  type  +  price  from  titles
--  正确
select  title_id  +  type  +   convert ( varchar ( 10 ), price)  from  titles

print   ' 123 '   +   convert ( varchar ( 3 ),  123 )
print   ' 123 '   +   ' 123 '


--  是否可以定义一个函数
--
 将作者编号作为参数统计其作品数量并将其返回
select  au_id, au_lname, dbo.GetTitleCountByAuID(au_id)  as  TitleCount 
from  authors
order   by  TitleCount

--  根据给定的作者编号获取其相应的作品数量
create   function  GetTitleCountByAuID( @au_id   varchar ( 12 ))
returns   int
begin
return  ( select   count (title_id) 
from  titleauthor
where  au_id  =   @au_id )
end


--  查看表结构
sp_help titles
--  查看存储过程的定义内容
sp_helptext GetRankByTitleId
sp_helptext sp_helptext 
sp_helptext xp_cmdshell


--  声明
declare  cur_titles  cursor
for   select  title, price  from  titles
--  打开
open  cur_titles
declare   @title   varchar ( 80 )
declare   @price  numeric( 9 , 4 )
declare   @title_temp   varchar ( 80 )
declare   @price_temp  numeric( 9 , 4 )
--  提取
fetch  cur_titles  into   @title @price
fetch  cur_titles  into   @title_temp @price_temp
while   @@fetch_status   =   0
begin
if   @price   <   @price_temp
begin
set   @price   =   @price_temp
set   @title   =   @title_temp
end  
fetch  cur_titles  into   @title_temp @price_temp
end
--  关闭
close  cur_titles
--  释放
deallocate  cur_titles

假设有张学生成绩表(CJ)如下
Name Subject Result
张三 语文 
80
张三 数学 
90
张三 物理 
85
李四 语文 
85
李四 数学 
92
李四 物理 
82

想变成 
姓名 语文 数学 物理
张三 
80   90   85
李四 
85   92   82

declare   @sql   varchar ( 4000 )
set   @sql   =   ' select Name '
select   @sql   =   @sql   +   ' ,sum(case Subject when  ''' + Subject + '''  then Result end) [ ' + Subject + ' ] '
from  ( select   distinct  Subject  from  CJ)  as  a
select   @sql   =   @sql + '  from test group by name '
exec ( @sql )

2 . 行列转换 -- 合并

有表A,
id pid
1   1
1   2
1   3
2   1
2   2
3   1
如何化成表B:
id pid
1   1 , 2 , 3
2   1 , 2
3   1

创建一个合并的函数
create   function  fmerg( @id   int )
returns   varchar ( 8000 )
as
begin
declare   @str   varchar ( 8000 )
set   @str = ''
select   @str = @str + ' , ' + cast (pid  as   varchar from  表A  where  id = @id   set   @str = right ( @str , len ( @str ) - 1 )
return ( @str )
End
go

-- 调用自定义函数得到结果
select   distinct  id,dbo.fmerg(id)  from  表A


查询某一个表的字段和数据类型
select  column_name,data_type  from  information_schema.columns
where  table_name  =   ' 表名 '  


3 .取回表中字段:
declare   @list   varchar ( 1000 ), @sql   nvarchar ( 1000
set   @list   =   ''
-- set @sql = ''
select   @list = @list + ' , ' + b.name  from  sysobjects a,syscolumns b  where  a.id = b.id  and  a.name = ' tb_user_msg '
set   @sql = ' select  ' + right ( @list , len ( @list ) - 1 ) + '  from tb_user_msg '  
--  print @sql
exec  sp_ExecuteSql  @sql

4 .查看硬盘分区:
EXEC  master..xp_fixeddrives

5 .比较A,B表是否相等:
if  ( select  checksum_agg(binary_checksum( * ))  from  A)
=
(
select  checksum_agg(binary_checksum( * ))  from  B)
print   ' 相等 '
else
print   ' 不相等 '

6 .杀掉所有的事件探察器进程:
DECLARE  hcforeach  CURSOR  GLOBAL  FOR   Select   ' kill  ' + RTRIM (spid)  FROM  master.dbo.sysprocesses
Where  program_name  IN ( ' SQL profiler ' ,N ' SQL 事件探查器 ' )
EXEC  sp_msforeach_worker  ' ? '


10 :获取某一个表的所有字段
select  name  from  syscolumns  where  id = object_id ( ' 表名 ' )

11 :查看与某一个表相关的视图、存储过程、函数
select  a. *   from  sysobjects a, syscomments b  where  a.id  =  b.id  and  b. text   like   ' %表名% '

9 :获取当前数据库中的所有用户表
select  Name  from  sysobjects  where  xtype = ' u '   and  status >= 0

12 :查看当前数据库中所有存储过程
select  name  as  存储过程名称  from  sysobjects  where  xtype = ' P '

14 :查询某一个表的字段和数据类型
select  column_name,data_type  from  information_schema.columns
where  table_name  =   ' 表名 '  

SQL字符函数:
返回字符串中从左边开始指定个数的字符。
LEFT  ( character_expression , integer_expression )
Select   LEFT (Name,  5 FROM  Production.Product  orDER   BY  ProductID;

RIGHT :返回字符表达式中从起始位置(从右端开始)到指定字符位置(从右端开始计数)的部分。
RIGHT (character_expression,integer_expression)
RIGHT ("Mountain Bike",  4 ) 返回结果Bike

LEN :返回给定字符串表达式的字符数(不包括尾随空格),而不是返回字节数。
LEN  ( string_expression ) 
Select  CompanyName,  LEN (CompanyName)
FROM  Customers

REPLICATE :按指定次数重复字符表达式。
REPLICATE  ( character_expression, integer_expression) 
下面的示例将 Employee 表中每一名雇员的姓氏复制两次:
Select   REPLICATE  (LastName,  2 AS  "LastName Twice"
FROM  Employees

SUBSTRING :返回 $sourceString 的子串,从 $startingLoc 指定的位置开始,长度为 $length 指定的字符数。  SUBSTRING  ( expression, start, length ) 
下面的示例返回 Employees 表中每位雇员的名字首字母及完整姓氏:
Select   SUBSTRING (First Name, 1 , 1 AS  Initial, Last Name
FROM  Employees

STUFF :删除指定长度的字符并在指定的起始点插入另一组字符。 -- 替换
STUFF  ( character_expression, start, length, character_expression ) 
Select   STUFF (ProductID,  2 , 1 ' 000 ' )
FROM  Products

PATINDEX :对于所有有效的文本和字符数据类型,返回指定表达式中模式第一次出现的起始位置,如果未找到模式,则返回零。
PATINDEX  (  ' %pattern% ' , expression ) 
下面的示例搜索其名称包含单词“Anton”的产品的列表。
Select  ProductName,  PATINDEX ( ' %Anton% ' , ProductName)
FROM  Products

CHARINDEX :返回字符串中指定表达式的起始位置。
CHARINDEX  ( expression1 , expression2  [  , start_location  ]  ) 
下面的示例从数据库中的员工姓氏中搜索表达式“an”:
Select   [ Last Name ] CHARINDEX ( ' an ' [ Last Name ] AS  Position
FROM  Employees

</script>

你可能感兴趣的:(sqlserver sql常用函数,语法)