sql使用大全文档格式.docx
《sql使用大全文档格式.docx》由会员分享,可在线阅读,更多相关《sql使用大全文档格式.docx(46页珍藏版)》请在冰豆网上搜索。
),--次要数据文件1
MyDB_FG1_Dat2'
d:
\MyDB_FG1_2.ndf'
),--次要数据文件2
FILEGROUPMyDB_FG2--用户定义文件组2
MyDB_FG1_Dat'
e:
\MyDB_FG2.ndf'
)--次要数据文件
LOGON--日志文件
MyDB_log'
FILENAME='
\MyDB.ldf'
)
--B.修改默认数据文件组
ALTERDATABASEMyDBMODIFYFILEGROUPMyDB_FG1DEFAULT
--切换到新建的数据库MyDB
USEMyDB
--C.在默认文件组MyDB_FG1创建表,并且指定图像数据保存在用户定义文件组MMyDB_FG2
CREATETABLEMyTable
(colaintPRIMARYKEY,
colbchar(8),
colcimage)
TEXTIMAGE_ONMyDB_FG2
--在用户定义文件组MyDB_FG2上创建索引
CREATEINDEXIX_MyTableONMyTable(cola)ONMyDB_FG2
--D.将要删除数据文件MyDB_FG1_Dat1上的数据转移到其他数据文件中,并且清空数据文件MyDB_FG1_Dat1
DBCCSHRINKFILE(MyDB_FG1_Dat1,EMPTYFILE)
--删除数据文件MyDB_FG1_Dat1
ALTERDATABASEMyDBREMOVEFILEMyDB_FG1_Dat1
调整tempdb数据库的文件属性.sql:
--A.将tempdb数据库的主数据文件大小设置为10MB。
ALTERDATABASEtempdb
MODIFYFILE(
name=tempdev,
size=100MB)
--B.将tempdb数据库的主数据文件移动到指定的磁盘分区上,并且为其添加一个数据文件。
--移动主数据文件
ALTERDATABASEtempdbMODIFYFILE
tempdev'
\tempdb.mdf'
--添加次要数据文件
ALTERDATABASEtempdbADDFILE
tempdata_1'
\tempdb_data_1.ndf'
日期概念理解中的一些测试.sql:
--A.测试datetime精度问题
DECLARE@tTABLE(datechar(21))
INSERT@tSELECT'
1900-1-100:
00:
00.000'
00.001'
00.009'
00.002'
00.003'
00.004'
00.005'
00.006'
00.007'
00.008'
SELECTdate,转换后的日期=CAST(dateasdatetime)FROM@t
/*--结果
date转换后的日期
-----------------------------------------------
00.0001900-01-0100:
00.000
00.0011900-01-0100:
00.0091900-01-0100:
00.010
00.0021900-01-0100:
00.003
00.0031900-01-0100:
00.0041900-01-0100:
00.0051900-01-0100:
00.007
00.0061900-01-0100:
00.0071900-01-0100:
00.0081900-01-0100:
(所影响的行数为10行)
--B.对于datetime类型的纯日期和时间的十六进制表示
DECLARE@dtdatetime
--单纯的日期
SET@dt='
1900-1-2'
SELECTCAST(@dtasbinary(8))
--结果:
0x0000000100000000
--单纯的时间
01'
0x000000000000012C
--C.对于smalldatetime类型的纯日期和时间的十六进制表示
DECLARE@dtsmalldatetime
SELECTCAST(@dtasbinary(4))
0x00010000
10'
0x0000000A
CONVERT在日期转换中的使用示例.sql:
--字符转换为日期时,Style的使用
--1.Style=101时,表示日期字符串为:
mm/dd/yyyy格式
SELECTCONVERT(datetime,'
11/1/2003'
101)
2003-11-0100:
--2.Style=101时,表示日期字符串为:
dd/mm/yyyy格式
103)
2003-01-1100:
/*==日期转换为字符串==*/
2003-1-11'
--1.Style=101时,表示将日期转换为:
mm/dd/yyyy格式
SELECTCONVERT(varchar,@dt,101)
01/11/2003
--2.Style=103时,表示将日期转换为:
dd/mm/yyyy格式
SELECTCONVERT(varchar,@dt,103)
11/01/2003
/*==这是很多人经常犯的错误,对非日期型转换使用日期的style样式==*/
SELECTCONVERT(varchar,'
2003-1-11
SETDATEFORMAT对日期处理的影响.sql
--1.
/*--说明
SETDATEFORMAT设置对使用CONVERT把字符型日期转换为日期的处理也具有影响
但不影响明确指定了style的CONVERT处理。
--示例,在下面的示例中,第一个CONVERT转换未指定style,转换的结果受SETDATAFORMAT的影响,第二个CONVERT转换指定了style,转换结果受style的影响。
--设置输入日期顺序为日/月/年
SETDATEFORMATDMY
--不指定Style参数的CONVERT转换将受到SETDATEFORMAT的影响
2-1-2005'
2005-01-0200:
--指定Style参数的CONVERT转换不受SETDATEFORMAT的影响
2005-02-0100:
--2.
如果输入的日期包含了世纪部分,则对日期进行解释处理时
年份的解释不受SETDATEFORMAT设置的影响。
--示例,在下面的代码中,同样的SETDATEFORMAT设置,输入日期的世纪部分与不输入日期的世纪部分,解释的日期结果不同。
--设置SETDATEFORMAT为:
月日年
SETDATEFORMATMDY
--输入的日期中指定世纪部分
01-2002-03'
SELECT@dt
2002-01-0300:
--输入的日期中不指定世纪部分
01-02-03'
2003-01-0200:
--3.
如果输入的日期不包含日期分隔符,那么SQLServer在对日期进行解释时
将忽略SETDATEFORMAT的设置。
--示例,在下面的代码中,不包含日期分隔符的字符日期,在不同的SETDATEFORMAT设置下,其解释的结果是一样的。
010203'
2001-02-0300:
日月年
--输入的日期中包含日期分隔符
2003-02-0100:
SETLANGUAGE对日期处理的影响示例.sql
--以下示例演示了在不同的语言环境(SETLANGUAGE)下,DATENAME与CONVERT函数的不同结果。
--设置会话的语言环境为:
English
SETLANGUAGEN'
English'
SELECT
DATENAME(Month,GETDATE())AS[Month],
DATENAME(Weekday,GETDATE())AS[Weekday],
CONVERT(varchar,GETDATE(),109)AS[CONVERT]
/*--结果:
MonthWeekdayCONVERT
----------------------------------------------------------
MarchTuesdayMar1520058:
59PM
简体中文
简体中文'
---------------------------------------------------------------------
05星期四051920052:
49:
20:
607PM
日期格式化处理.sql
SET@dt=GETDATE()
--1.短日期格式:
yyyy-m-d
SELECTREPLACE(CONVERT(varchar(10),@dt,120),N'
-0'
'
-'
--2.长日期格式:
yyyy年mm月dd日
--A.方法1
SELECTSTUFF(STUFF(CONVERT(char(8),@dt,112),5,0,N'
年'
),8,0,N'
月'
)+N'
日'
--B.方法2
SELECTDATENAME(Year,@dt)+N'
+DATENAME(Month,@dt)+N'
+DATENAME(Day,@dt)+N'
--3.长日期格式:
yyyy年m月d日
+CAST(DATEPART(Month,@dt)ASvarchar)+N'
--4.完整日期+时间格式:
yyyy-mm-ddhh:
mi:
ss:
mmm
SELECTCONVERT(char(11),@dt,120)+CONVERT(char(12),@dt,114)
日期推算处理.sql
DECLARE@numberint
SET@number=3
--1.指定日期该年的第一天或最后一天
--A.年的第一天
SELECTCONVERT(char(5),@dt,120)+'
1-1'
--B.年的最后一天
12-31'
--2.指定日期所在季度的第一天或最后一天
--A.季度的第一天
SELECTCONVERT(datetime,
CONVERT(char(8),
DATEADD(Month,
DATEPART(Quarter,@dt)*3-Month(@dt)-2,
@dt),
120)+'
1'
--B.季度的最后一天(CASE判断法)
DATEPART(Quarter,@dt)*3-Month(@dt),
120)
+CASEWHENDATEPART(Quarter,@dt)in(1,4)
THEN'
31'
ELSE'
30'
END)
--C.季度的最后一天(直接推算法)
SELECTDATEADD(Day,-1,
1+DATEPART(Quarter,@dt)*3-Month(@dt),
--3.指定日期所在月份的第一天或最后一天
--A.月的第一天
SELECTCONVERT(datetime,CONVERT(char(8),@dt,120)+'
--B.月的最后一天
SELECTDATEADD(Day,-1,CONVERT(char(8),DATEADD(Month,1,@dt),120)+'
--C.月的最后一天(容易使用的错误方法)
SELECTDATEADD(Month,1,DATEADD(Day,-DAY(@dt),@dt))
--4.指定日期所在周的任意一天
SELECTDATEADD(Day,@number-DATEPART(Weekday,@dt),@dt)
--5.指定日期所在周的任意星期几
--A.星期天做为一周的第1天
SELECTDATEADD(Day,@number-(DATEPART(Weekday,@dt)+@@DATEFIRST-1)%7,@dt)
--B.星期一做为一周的第1天
SELECTDATEADD(Day,@number-(DATEPART(Weekday,@dt)+@@DATEFIRST-2)%7-1,@dt)
特殊日期加减函数.sql
ifexists(select*fromdbo.sysobjectswhereid=object_id(N'
[dbo].[f_DateADD]'
)andxtypein(N'
FN'
N'
IF'
TF'
))
dropfunction[dbo].[f_DateADD]
/*--特殊日期加减函数
对于日期指定部分的加减,使用DATEADD函数就可以轻松实现。
在实际的处理中,还有一种比较另类的日期加减处理
就是在指定的日期中,加上(或者减去)多个日期部分
比如将2005年3月11日,加上1年3个月11天2小时。
对于这种日期的加减处理,DATEADD函数的力量就显得有点不够。
本函数实现这样格式的日期字符串加减处理:
y-m-dh:
m:
s.m|-y-m-dh:
s.m
说明:
要加减的日期字符输入方式与日期字符串相同。
日期与时间部分用空格分隔
最前面一个字符如果是减号(-)的话,表示做减法处理,否则做加法处理。
如果日期字符只包含数字,则视为日期字符中,仅包含天的信息。
/*--调用示例
SELECTdbo.f_DateADD(GETDATE(),'
11:
CREATEFUNCTIONdbo.f_DateADD(
@Datedatetime,
@DateStrvarchar(23)
)RETURNSdatetime
AS
BEGIN
DECLARE@bzint,@svarchar(12),@iint
IF@DateStrISNULLOR@DateISNULL
OR(CHARINDEX('
.'
@DateStr)>
AND@DateStrNOTLIKE'
%[:
]%[:
]%.%'
RETURN(NULL)
IF@DateStr='
'
RETURN(@Date)
SELECT@bz=CASE
WHENLEFT(@DateStr,1)='
THEN-1
ELSE1END,
@DateStr=CASE
WHENLEFT(@Date,1)='
THENSTUFF(RTRIM(LTRIM(@DateStr)),1,1,'
ELSERTRIM(LTRIM(@DateStr))END
IFCHARINDEX('
'
1
ORCHARINDEX('
@DateStr)=0
ANDCHARINDEX('
:
@DateStr)=0)
BEGIN
SELECT@i=CHARINDEX('
@DateStr+'
@s=REVERSE(LEFT(@DateStr,@i-1))+'
@DateStr=STUFF(@DateStr,1,@i,'
@i=0
WHILE@s>
and@i<
3
SELECT@Date=CASE@i
WHEN0THENDATEADD(Day,@bz*REVERSE(LEFT(@s,CHARINDEX('
@s)-1)),@Date)
WHEN1THENDATEADD(Month,@bz*REVERSE(LEFT(@s,CHARINDEX('
WHEN2THENDATEADD(Year,@bz*REVERSE(LEFT(@s,CHARINDEX('
END,
@s=STUFF(@s,1,CHARINDEX('
@s),'
@i=@i+1
END
IF@DateStr>
SELECT@Date=DATEADD(Millisecond
@bz*STUFF(@DateStr,1,CHARINDEX('
@DateStr),'
@Date),
@DateStr=LEFT(@DateStr,CHARINDEX('
@DateStr)-1)+'
@i=0
ELSE
SELECT@DateStr=@DateStr+'
@i=0
WHILE@DateStr>
WHEN0THENDATEADD(Hour,@bz*LEFT(@D