自学成才

                      一步一步往上爬

一.sysobjectstype的含义(与临时系统表TEMPDB..SYSOBJECTS 类似)

type   char(2)   对象类型。可以是下列值之一:  
C   =   CHECK   约束  
D   =   默认值或   DEFAULT   约束
F   =   FOREIGN   KEY   约束  
FN   =   标量函数
IF   =   内嵌表函数
K   =   PRIMARY   KEY   或   UNIQUE   约束  
L   =   日志
P   =   存储过程
R   =   规则
RF   =   复制筛选存储过程
S   =   系统表  
TF   =   表函数
TR   =   触发器
U   =   用户表
V   =   视图
X   =   扩展存储过程

常用:U,P

二.RTRIM与LTRIM与TRIM

RTRIM:截断尾格空格或者说舍去右边空字符串返回字符串

LTRIM:删除起始空格后返回字符串表达式

TRIM: 前导和尾随空白,即左边和右边空格

语法LTrim(string)RTrim(string)Trim(string)必要的 string 参数可以是任何有效的字符串表达式。如果 string 包含 Null,将返回 Null

例子:

Declare @stringto_trim varchar(200)

Set  @stringto_trim='  wo shi zhang wen ni shi shui ?                       '

Select  'Here is the string without ledaing:' + LTRIM(RTRIM(@stringto_trim))

Go

三.按顺序查询例子

Select * from table where dagan=’16’ or dagan=’11’ or dagan=’17’ or dagan=’15’ order by case dagan when ‘16’ then 1 whern ‘11’ then 2 when ‘17’ then 3 when ‘15’ then 4 end

四.Char(10)与VARCHAR(10)区别

CHAR(10):长度固定 如:“ABC”占据10个字节,7个空字符

VARCHAR(10):弹性,“ABC”占据3个字节,最大10个字符

五.CAST与CONVERT的使用

一般是从datetime型转化为VARCHAR型,一般建议使用CAST

CONVERT(data_type,e­xpression[,style]) convert 是转换数据类型的函数

Select CONVERT(varchar(100), GETDATE(), 120): 20##-05-16 10:57:49

Select CONVERT(varchar(30),getdate(),101) now  06/02/2009

语句及查询结果:

Select CONVERT(varchar(100), GETDATE(), 0): 05 16 20## 10:57AM

Select CONVERT(varchar(100), GETDATE(), 1): 05/16/06

Select CONVERT(varchar(100), GETDATE(), 2): 06.05.16

Select CONVERT(varchar(100), GETDATE(), 3): 16/05/06

Select CONVERT(varchar(100), GETDATE(), 4): 16.05.06

Select CONVERT(varchar(100), GETDATE(), 5): 16-05-06

Select CONVERT(varchar(100), GETDATE(), 6): 16 05 06

Select CONVERT(varchar(100), GETDATE(), 7): 05 16, 06

Select CONVERT(varchar(100), GETDATE(), 8): 10:57:46

Select CONVERT(varchar(100), GETDATE(), 9): 05 16 20## 10:57:46:827AM

Select CONVERT(varchar(100), GETDATE(), 10): 05-16-06

Select CONVERT(varchar(100), GETDATE(), 11): 06/05/16

Select CONVERT(varchar(100), GETDATE(), 12): 060516

Select CONVERT(varchar(100), GETDATE(), 13): 16 05 20## 10:57:46:937

Select CONVERT(varchar(100), GETDATE(), 14): 10:57:46:967

Select CONVERT(varchar(100), GETDATE(), 20): 20##-05-16 10:57:47

Select CONVERT(varchar(100), GETDATE(), 21): 20##-05-16 10:57:47.157

Select CONVERT(varchar(100), GETDATE(), 22): 05/16/06 10:57:47 AM

Select CONVERT(varchar(100), GETDATE(), 23): 20##-05-16 <--------------

Select CONVERT(varchar(100), GETDATE(), 24): 10:57:47

Select CONVERT(varchar(100), GETDATE(), 25): 20##-05-16 10:57:47.250

Select CONVERT(varchar(100), GETDATE(), 100): 05 16 20## 10:57AM

Select CONVERT(varchar(100), GETDATE(), 101): 05/16/2006

Select CONVERT(varchar(100), GETDATE(), 102): 2006.05.16

Select CONVERT(varchar(100), GETDATE(), 103): 16/05/2006

Select CONVERT(varchar(100), GETDATE(), 104): 16.05.2006

Select CONVERT(varchar(100), GETDATE(), 105): 16-05-2006

Select CONVERT(varchar(100), GETDATE(), 106): 16 05 20##

Select CONVERT(varchar(100), GETDATE(), 107): 05 16, 20##

Select CONVERT(varchar(100), GETDATE(), 108): 10:57:49

Select CONVERT(varchar(100), GETDATE(), 109): 05 16 20## 10:57:49:437AM

Select CONVERT(varchar(100), GETDATE(), 110): 05-16-2006

Select CONVERT(varchar(100), GETDATE(), 111): 2006/05/16

Select CONVERT(varchar(100), GETDATE(), 112): 20060516

Select CONVERT(varchar(100), GETDATE(), 113): 16 05 20## 10:57:49:513

Select CONVERT(varchar(100), GETDATE(), 114): 10:57:49:547

Select CONVERT(varchar(100), GETDATE(), 120): 20##-05-16 10:57:49

Select CONVERT(varchar(100), GETDATE(), 121): 20##-05-16 10:57:49.700

Select CONVERT(varchar(100), GETDATE(), 126): 20##-05-16T10:57:49.827

Select CONVERT(varchar(100), GETDATE(), 130): 18 ???? ?????? 1427 10:57:49:907AM

Select CONVERT(varchar(100), GETDATE(), 131): 18/04/1427 10:57:49:920AM

如果你希望将这个变量明确生成为datetime或smalldatetime变量,以此在特定的数据库栏中兼容,那么你可以使用以下语句:

  SELECT CAST(CONVERT(CHAR(10),CURRENT_TIMESTAMP,102) AS DATETIME

  返回值将是 yy.mm.dd 00:00:00(如12:00AM作为时间戳;

六.Creat与alter

  CREATR 是创建一个储存过程或者表时使用

  Create Proc LyArticleInEditProc

  ALTER  是修改储存过程时使用(有些时候储存过程不能被删除重新创建)

ALTER    Procedure     LyCountSalaryProc

七.新建一个储存过程以及新建一个临时表的方法

-- IF EXISTS意思是如果括号内有返回值的存在,则执行下面语句

 IF EXISTS(SELECT * FROM sysobjects where name='zhangwengongziproc' and type='p'

drop proccedure zhangwengongziproc

use  lymis

go

create proc zhangwengongziproc

(

@code varchar(10)

....

)

as

declare @Seven Float,

      @Eight Float,

      @Nine Float,

      @SQL VarChar(1000),

      @Year1 Char(4)

新建临时表

IF EXISTS(SELECT * FROM tempdb..sysobjects where name='##zhangwengongziproc' and type='u')

drop table ##zhangwengongziproc

use  lymis

go

create table ##zhangwengongziproc

(

code varchar(10)

)

declare @Seven Float,

      @Eight Float,

      @Nine Float,

      @SQL VarChar(1000),

      @Year1 Char(4)

八.关于default(0.0)默认一位小数default(0)默认整数

九.Substring()函数使用

作用:截取字符串需要字符

Substring(‘’ABCDEFG’,2,4)   返回字符串第2位开始的第四个字符 即 BCED

十.Len()与datelength()区别

Len()返回字符数 注意:不包含尾格空字符,不可以对文本截断

Datelength()返回字节数

十一.union与union all区别

Union 对两个结果进行并集操作,不包括重复行,同时进行默认规则排序(INTERSECCT)

Union all对两个结果进行并集操作,  包括重复行,  不进行排序 (minus)

十二.引号 +号

declare  @value varchar(100)

declare  @str varchar(8000)

set @value='             a    a          '

set @str='   insert into 表名  values(你的名字 '+' '+ltrim(''+@value+'')+' '+' 张文)   

print @str

十三.有关SQL数据库查询EXCEL导入导出

导入如:

if Exists (Select * from tempdb..Sysobjects where name='##tmptablep' and type='u')

Drop Table ##tmptablep

select sort,dept,class,plu into ##tmptablep

FROM OpenDataSource('Microsoft.Jet.OLEDB.4.0','Data Source="D:\重複品牌業績導出\Modal.xls";User ID=Admin;Password=;Extended properties=Excel 8.0')...[book1$]

insert into zhangwenRepPlu(sort,dept,class,plu)

select sort,dept,class,plu from ##tmptablep

SELECT * FROM OPENROWSET('microsoft.jet.oledb.4.0','excel 8.0;hdr=yse;User id=用户名;pwd=密码;database=e:\11.xls',[sheet1$])

--OpenDataSource    打开一个新的标记

--('Microsoft.Jet.OLEDB.4.0','Data Source=”” 是ADO控件

--D:\重複品牌業績導出\Modal.xls    是数据地址

--User ID=Admin;Password=;Extended properties=Excel 8.0'这是用户名  密码和操作方式

查询导出如:

EXEC master..xp_cmdshell 'bcp zhangwenRepPlu out d:\重複品牌業績導出\zhangwenRepPlu.xls -c -q -S"(local)" -U"sa" -P""'

---(文)-c -q -S"数据库服务器名" -U"数据库用户名" -P"数据库用户密码"'

十四INNER JION & LEFT JION & RIGHT JOIN 的区别

inner join(等值连接) 创建只包含联接字段中数据相同的记录的查询

left join(左联接) 创建左边外部联接.左边外部联接将包含了从第一个(左边)开始的两个表中的全部记录,即使在第二个(右边)表中并没有相符值的记录。如果没有相符值的记录则该字段的值为NULL

right join(右联接) 创建 右边外部联接.右边外部联接将包含了从第二个(右边)开始的两个表中的全部记录,即使在第一个(左边)表中并没有匹配值的记录。如果没有相符值的记录则该字段的值为NULL

注意:

1、在 INNER JOIN 之中可以写一个嵌套的 LEFT JOIN 或一个 RIGHT JOIN,但是在一个 LEFT JOIN 或一个 RIGHT JOIN 之中不能写

嵌套的 INNER JOIN。

2、可以链接多个 ON 子句。

3、以上为横向联接,并且是将左右两表中的所有字段合并,即使两表中拥有相同的字段名。

十五. isnull(sum(unitprice),0)   ,   不计算unitprice为null的值  

  和sum(isnull(unitprice,0)),   计算unitprice为null,并置为0  

  但结果是一样,如是avg函数,则结果会有区别的!

如:

Select saleno,IsNull(Sum(SsTotal),0) as jine  From ##tmp where left(depcode,5)=@depcode  Group by saleno

十六. DATEADD() 函数在日期中添加或减去指定的时间间隔。

   -- Set @BegDate='20##-11-09'

-- Set @EndDate='20##-12-02'

-- Set @MidDate=@BegDate

--

-- While @MidDate<=@EndDate

-- Begin

-- Insert into LyYuGuDateRate(UpDepCode,PlanDate,DateRate,DateTotal)

-- values ('4',''+@MidDate+'','0','0')

--

-- Set @MidDate=Convert(char(10),DateAdd(d,1,@MidDate),120)

--

-- End

十七.SQL Server数据库快捷键:

书签:清除所有书签。 CTRL-SHIFT-F2

书签:或删除书签(切换)。 CTRL+F2

书签:移动到下一个书签。 F2 功能键

书签:移动到上一个书签。 SHIFT+F2

取消查询。 ALT+BREAK

连接:连接。 CTRL+O

连接:断开连接。 CTRL+F4

连接:断开连接并关闭子窗口。 CTRL+F4

数据库对象信息。 ALT+F1

编辑:清除活动的编辑器窗格。 CTRL+SHIFT+DEL

编辑:注释代码。 CTRL+SHIFT+C

编辑:复制。还可以使用 CTRL+INSERT。 CTRL+C

编辑:剪切。还可以使用 SHIFT+DEL。 CTRL+X

编辑:减小缩进。 SHIFT+TAB

编辑:在编辑器窗格中删除至行尾。 CTRL+DEL

编辑:查找。 CTRL+F

编辑:转到行号。 CTRL+G

编辑:增大缩进。 TAB

编辑:使选定内容为小写。 CTRL+SHIFT+L

编辑:使选定内容为大写。 CTRL+SHIFT+U

编辑:粘贴。还可以使用 SHIFT+INSERT。 CTRL+V

编辑:删除注释。 CTRL+SHIFT+R

编辑:重复上次搜索或查找下一个。 F3 功能键

编辑:替换。 CTRL+H

编辑:全选。 CTRL+A

编辑:撤消。 CTRL+Z

执行查询。还可以使用 CTRL+E (针对向后兼容性)。 F5 功能键

SQL 查询分析器帮助。 F1 功能键

对所选 Transact-SQL 语句的帮助。 SHIFT+F1

浏览:在查询窗格和结果窗格之间切换。 F6 功能键

浏览:切换窗格。 Shift+F6

浏览:窗口选择器。 CTRL+W

"新建查询"窗口。 CTRL+N

对象浏览器(显示/隐藏)。 F8 功能键

对象搜索。 F4 功能键

分析查询并检查语法。 CTRL+F5

打印。 CTRL+P

结果:以表格格式显示结果。 CTRL+D

结果:以文本格式显示结果。 CTRL+T

结果:移动拆分器。 CTRL+B

结果:将结果保存为文件。 CTRL+SHIFT+F

结果:显示结果窗格(切换)。 CTRL+R

保存。 CTRL+S

模板:模板。 CTRL+SHIFT+INSERT

模板:替换模板参数。 CTRL+SHIFT+M

优化:显示预估执行计划。 CTRL+L

优化:显示执行计划(切换开/关)。 CTRL+K

优化:索引优化向导。 CTRL+I

优化:显示客户统计 CTRL+SHIFT+S

优化:显示服务器跟踪。 CTRL+SHIFT+T

使用数据库。 CTRL+U

十八。Datename用法

返回代表指定日期的指定日期部分的字符串

语法

DATENAME ( datepart , date )

参数

datepart是指定应返回的日期部分的参数。下表列出了 Microsoft® SQL Server? 识别的日期部分和缩写。

日期部分     缩写

Year          yy, yyyy

Quarter       qq, q

month         mm, m

dayofyear      dy, y

day           dd, d

week          wk, ww

weekday        dw

Hour            hh

minute            mi, n

second            ss, s

millisec           ond ms

如:datename(weekday,xsdate) in(''星期五'',''星期六'',''星期日'')

    declare   @KStime   varchar(10)  

  set   @KStime   =   '20##-11-20'  

  Select   datename(weekday,convert(datetime,@KStime)) 返回星期四

Or

declare   @KStime   varchar(10)  

  set   @KStime   =   '20##-11-20'  

  Select   datename(weekday,@KStime)  

Or

declare   @KStime   varchar(10)  

  set   @KStime   =   '20##年1月5日'  

  --Select   datename(weekday,convert(datetime,@KStime))  

  Select   datename(weekday,replace(replace(replace(@KStime,'年','-'),'月','-'),'日','-'))   等同

  declare   @KStime   varchar(10)  

  set   @KStime   =   '20##年1月5日'  

  set   @KStime   =    

  replace(replace(replace(@KStime,'年','-'),'月','-'),'日','-')  

  select   datename(weekday,@KStime) 

十九。STUFF

删除指定长度的字符并在指定的起始点插入另一组字符。

语法

STUFF ( character_expression , start , length , character_expression )

示例

下例通过在第一个字符串 (abcdef) 中删除从第二个位置(字符 b)开始的三个字符,然后在删除的起始位置插入第二个字符串,创建并返回一个字符串。

SELECT STUFF('abcdef', 2, 3, 'ijklmn')

GO

下面是结果集:

---------

aijklmnef

(1 row(s) affected)

二十。关于赋值(当后面是一条语句时,子查询时候记得用括号)

set @i=(select max(orderId) from  ##teptabledate)