以复习为目的吧,整理了自己以前在学习T-SQL时的 常用语句 下载
获取当前日期时间
1 select getdate() 2 --结果:2012-07-12 06:20:58.670
获取星期几
----返回table CREATE FUNCTION [dbo].[WeekDayName] ( ) RETURNS @WeekDayName TABLE([Id] INT,[WeekDayName] NVARCHAR(15)) AS BEGIN INSERT INTO @WeekDayName ([Id],[WeekDayName]) VALUES (0,‘Saturday‘),(1,‘Sunday‘),(2,‘Monday‘),(3,‘Tuesday‘),(4,‘Wednesday‘),(5,‘Thursday‘),(6,‘Friday‘) RETURN END
----返回名称 CREATE FUNCTION [dbo].[WeekDayNameOfDate] ( @Date DATETIME ) RETURNS NVARCHAR(10) BEGIN RETURN CASE (DATEPART(dw, @Date) + @@DATEFIRST) % 7 WHEN 0 THEN ‘Saturday‘ WHEN 1 THEN ‘Sunday‘ WHEN 2 THEN ‘Monday‘ WHEN 3 THEN ‘Tuesday‘ WHEN 4 THEN ‘Wednesday‘ WHEN 5 THEN ‘Thursday‘ WHEN 6 THEN ‘Friday‘ END END ----调用表值函数 select * from dbo.WeekDayName() ----调用标量值函数select dbo.WeekDayNameOfDate(‘2012-01-03‘)
select getdate(),datename(weekday,getdate()),datepart(weekday,getdate()) --datename 返回星期名称; --datepart 返回数值; --例子: select case datepart(dw,getdate()) when 1 then ‘星期天 ‘ when 2 then ‘星期一 ‘ when 3 then ‘星期二 ‘ when 4 then ‘星期三 ‘ when 5 then ‘星期四 ‘ when 6 then ‘星期五 ‘ when 7 then ‘星期六 ‘ end
下面是一些常用的关于时间日期的方法
1 select getdate() 2 --结果2011-10-23 11:06:23.390 3 4 select datediff(yyyy,getdate(),‘2011-01-01‘) 5 select datediff(yyyy,getdate(),‘2010-1-1‘) 6 select datediff(yyyy,getdate(),‘2012-1-1‘) 7 8 --可用于判断数据库里面的数据是否属于同年 9 --如果为同一年则返回0 10 --前年日期返回负数 11 --明后年日期返回大于零的正整数 12 ------------------------------------ 13 --一个月第一天的 14 Select DATEADD(mm, DATEDIFF(mm,0,getdate()), 0) 15 16 --本周的星期一 17 Select DATEADD(wk, DATEDIFF(wk,0,getdate()), 0) 18 19 --一年的第一天 20 Select DATEADD(yy, DATEDIFF(yy,0,getdate()), 0) 21 22 --季度的第一天 23 Select DATEADD(qq, DATEDIFF(qq,0,getdate()), 0) 24 25 --当天的半夜 26 Select DATEADD(dd, DATEDIFF(dd,0,getdate()), 0) 27 28 --上个月的最后一天 29 Select dateadd(ms,-3,DATEADD(mm, DATEDIFF(mm,0,getdate()), 0)) 30 31 --去年的最后一天 32 Select dateadd(ms,-3,DATEADD(yy, DATEDIFF(yy,0,getdate()), 0)) 33 34 --本月的最后一天 35 Select dateadd(ms,-3,DATEADD(mm, DATEDIFF(m,0,getdate())+1, 0)) 36 37 --本年的最后一天 38 Select dateadd(ms,-3,DATEADD(yy, DATEDIFF(yy,0,getdate())+1, 0)) 39 40 --本月的第一个星期一 41 select DATEADD(wk, DATEDIFF(wk,0,dateadd(dd,6-datepart(day,getdate()),getdate())), 0) 42 ------------------------------------------- 43 --建立一个表,其中的记录包含有当前的日期和时间,可以添加一个DATETIME型字段,指定其缺省值为函数GETDATE()的返回值,就象这样: 44 45 Create TABLE #site_log (username VARCHAR(40),useractivity VARCHAR(100),entrydate DATETIME DEFAULT GETDATE()) 46 drop table #site_log 47 48 --转换日期和时间 49 --函数GETDATE()的返回值在显示时只显示到秒。实际上,SQL Sever内部时间可以精确到毫秒级(确切地说,可以精确到3.33毫秒) 50 Select CONVERT(VARCHAR(30),GETDATE(),9) 51 在函数CONVERT()中你可以使用许多种不同风格的日期和时间格式 52 日期和时间的类型: 53 类型值 标准 输出 54 0 Default mon dd yyyy hh:miAM 55 1 USA mm/dd/yy 56 2 ANSI yy.mm.dd 57 3 British/French dd/mm/yy 58 4 German dd.mm.yy 59 5 Italian dd-mm-yy 60 6 - dd mon yy 61 7 - mon dd,yy 62 8 - hh:mi:ss 63 9 Default + milliseconds--mon dd yyyy hh:mi:ss:mmmAM(or ) 64 10 USA mm-dd-yy 65 11 JAPAN yy/mm/dd 66 12 ISO yymmdd 67 13 Europe Default + milliseconds--dd mon yyyy hh:mi:ss:mmm(24h) 68 14 - hh:mi:ss:mmm(24h) 69 70 select convert(varchar(30),getdate(),106) 71 select convert(varchar(30),getdate(),6) 72 /**类型0,9,和13总是返回四位的年。 73 对其它类型,要显示世纪,把style值加上100。 74 类型13和14返回24小时时钟的时间。 75 类型0,7,和13返回的月份用三位字符表示(用Nov代表November) 76 对表中所列的每一种格式,你可以把类型值加上100来显示有世纪的年(例如,00年将显示为2000年)*/ 77 78 --抽取日期和时间 79 --在许多情况下,也许只想得到日期和时间的一部分,而不是完整的日期和时间。为了抽取日期的特定部分,你可以使用函数DATEPARt() 80 81 select datepart(dd,getdate()) 82 select datepart(mm,getdate()) 83 select datepart(yyyy,getdate()) 84 select datepart(yy,getdate()) 85 --函数DATEPART()的参数是两个变量。第一个变量指定要抽取日期的哪一部分;第二个变量是实际的数据。在这个例子中,函数DATEPART()抽取月份,因为mm代表月份。下面是这个Select 语句的输出结果: 86 --函数DATEPART()的返回值是一个整数 87 88 --日期的各部分及其简写 89 日期部分 简写 值 90 year yy 1753--9999 91 quarter qq 1--4 92 month mm 1--12 93 day of year dy 1--366 94 day dd 1--31 95 week wk 1--53 96 weekday dw 1--7(Sunday--Saturday) 97 hour hh 0--23 98 minute mi 0--59 99 second ss 0--59 100 milisecond ms 0--999 101 102 --当你需要进行日期和时间的比较时,使用函数DATEPART()返回整数是有用的。要以更易读的格式得到部分的日期和时间,你可以使用函数DATENAME(),如下例所示: 103 104 Select site_name ‘Site Name’ 105 DATENAME(mm,site_entrydate) ‘Month Posted’ 106 FROM site_directory 107 108 select datename(mm,getdate()) 109 110 --函数DATENAME()和函数DATEPART()接收同样的参数 111 --它的返回值是一个字符串,而不是一个整数 112 113 --可以用函数DATENAME()来抽取一个星期中的某一天。下面的这个例子同时抽取一周中的某一天和日期中的月份: 114 115 select datename(dw,getdate())+‘-‘+datename(mm,getdate()) as ‘Day and Month Posted‘ 116 117 --返回日期和时间范围 118 --当分析表中的数据时,也许希望取出某个特定时间的数据 119 --也许对特定的某一天中,比如说2000年12月25日――访问者在你站点上的活动感兴趣,要取出这种类型的数据,你也许会试图使用这样的Select语句 120 Select * FROM weblog Where entrydate="12/25/20000" 121 --不要这样做。这个Select语句不会返回正确的记录 122 --它将只返回日期和时间是12/25/2000 12:00:00:000AM的记录,换句话说,只有刚好在午夜零点输入的记录才被返回。 123 124 --问题是SQL Sever将用完整的日期和时间代替部分日期和时间。 125 --例如,当你输入一个日期,但不输入时间时,SQL Sever将加上缺省的时间"00:00:00:000AM" 126 --当你输入一个时间,但不输入日期时,SQL Sever将加上缺省的日期"Jan 1 1900"。 127 --要返回正确的记录,你需要适用日期和时间范围。有不止一种途径可以做到这一点。例如,下面的这个Select 语句将能返回正确的记录: 128 129 create table #dt(da datetime,id int)--验证sql缺省日期时间 130 insert into #dt values(‘2011-10-10‘,1) 131 insert into #dt values(‘09:10:10‘,2) 132 select * from #dt 133 drop table #dt 134 135 Select * FROM weblog 136 Where entrydate>=”12/25/2000” AND entrydate<”12/26/2000” 137 --这个语句可以完成任务,因为它选取的是表中的日期和时间大于等于12/25/2000 00:00:00:000AM并小于12/26/2000 00:00:00:000AM的记录。换句话说,它将正确地返回2000年圣诞节这一天输入的每一条记录。 138 --另一种方法是,你可以使用LIKE来返回正确的记录。通过在日期表达式中包含通配符"%",你可以匹配一个特定日期的所有时间。这里有一个例子: 139 140 Select * FROM weblog Where entrydate LIKE ‘Dec 25 2000%’ 141 142 --这个语句可以匹配正确的记录。因为通配符“%”代表了任何时间。 143 --使用这两种匹配日期和时间范围的函数,你可以选择某个月,某一天,某一年,某个小时,某一分钟,某一秒,甚至某一毫秒内输入的记录。但是,如果你使用 LIKE 来匹配秒或毫秒,你首先需要使用函数CONVERT()把日期和时间转换为更精确的格式 144 145 --比较日期和时间 146 --最后,还有两个日期和时间函数对根据日期和时间取出记录是有用的。使用函数DATEADD()和DATEDIFF(),你可以比较日期的早晚。例如,下面的Select语句将显示表中的每一条记录已经输入了多少个小时: 147 148 select datediff(mm,getdate(),‘2011-10-10‘) 149 150 --函数DADEDIFF()的参数是三个变量。第个变量指定日期的某一部分。在这个例子中,是按小时对日期进行比较,在日期2000年11月1日和2000年11月30日的指定时间之间有689个小时。另外两个参数是要进行比较的时间。为了返回一个正数,较早的时间应该先给。 151 --函数DATEADD()把两个日期相加。当你需要计算截止日期这一类的数据时,这个函数是有用处的 152 153 154 select dateadd(mm,-1,getdate()); 155 156 --函数DATEADD()的参数有三个变量。第一个变量代表日期的某一部分,这个例子用到了代表月份的mm。 157 --第二个变量指定了时间的间隔――在本例中是一个月。 158 --最后一个变量是一个日期 159 --注意: 160 --使用函数DATEADD()把一个日期加上一个月,它并不加上30天。这个函数只简单地把月份值加1。 161 162 163 --------------------------------------- 164 Select CONVERT(varchar(100), GETDATE(), 0): 05 16 2006 10:57AM 165 Select CONVERT(varchar(100), GETDATE(), 1): 05/16/06 166 Select CONVERT(varchar(100), GETDATE(), 2): 06.05.16 167 Select CONVERT(varchar(100), GETDATE(), 3): 16/05/06 168 Select CONVERT(varchar(100), GETDATE(), 4): 16.05.06 169 Select CONVERT(varchar(100), GETDATE(), 5): 16-05-06 170 Select CONVERT(varchar(100), GETDATE(), 6): 16 05 06 171 Select CONVERT(varchar(100), GETDATE(), 7): 05 16, 06 172 Select CONVERT(varchar(100), GETDATE(), 8): 10:57:46 173 Select CONVERT(varchar(100), GETDATE(), 9): 05 16 2006 10:57:46:827AM 174 Select CONVERT(varchar(100), GETDATE(), 10): 05-16-06 175 Select CONVERT(varchar(100), GETDATE(), 11): 06/05/16 176 Select CONVERT(varchar(100), GETDATE(), 12): 060516 177 Select CONVERT(varchar(100), GETDATE(), 13): 16 05 2006 10:57:46:937 178 Select CONVERT(varchar(100), GETDATE(), 14): 10:57:46:967 179 Select CONVERT(varchar(100), GETDATE(), 20): 2006-05-16 10:57:47 180 Select CONVERT(varchar(100), GETDATE(), 21): 2006-05-16 10:57:47.157 181 Select CONVERT(varchar(100), GETDATE(), 22): 05/16/06 10:57:47 AM 182 Select CONVERT(varchar(100), GETDATE(), 23): 2006-05-16 183 Select CONVERT(varchar(100), GETDATE(), 24): 10:57:47 184 Select CONVERT(varchar(100), GETDATE(), 25): 2006-05-16 10:57:47.250 185 Select CONVERT(varchar(100), GETDATE(), 100): 05 16 2006 10:57AM 186 Select CONVERT(varchar(100), GETDATE(), 101): 05/16/2006 187 Select CONVERT(varchar(100), GETDATE(), 102): 2006.05.16 188 Select CONVERT(varchar(100), GETDATE(), 103): 16/05/2006 189 Select CONVERT(varchar(100), GETDATE(), 104): 16.05.2006 190 Select CONVERT(varchar(100), GETDATE(), 105): 16-05-2006 191 Select CONVERT(varchar(100), GETDATE(), 106): 16 05 2006 192 Select CONVERT(varchar(100), GETDATE(), 107): 05 16, 2006 193 Select CONVERT(varchar(100), GETDATE(), 108): 10:57:49 194 Select CONVERT(varchar(100), GETDATE(), 109): 05 16 2006 10:57:49:437AM 195 Select CONVERT(varchar(100), GETDATE(), 110): 05-16-2006 196 Select CONVERT(varchar(100), GETDATE(), 111): 2006/05/16 197 Select CONVERT(varchar(100), GETDATE(), 112): 20060516 198 Select CONVERT(varchar(100), GETDATE(), 113): 16 05 2006 10:57:49:513 199 Select CONVERT(varchar(100), GETDATE(), 114): 10:57:49:547 200 Select CONVERT(varchar(100), GETDATE(), 120): 2006-05-16 10:57:49 201 Select CONVERT(varchar(100), GETDATE(), 121): 2006-05-16 10:57:49.700 202 Select CONVERT(varchar(100), GETDATE(), 126): 2006-05-16T10:57:49.827: 203 Select CONVERT(varchar(100), GETDATE(), 131): 18/04/1427 10:57:49:920AM
各系统表的作用
1 MSSQL中各个系统表的作用 2 3 sysaltfiles 主数据库 保存数据库的文件 4 syscharsets 主数据库 字符集与排序顺序 5 sysconfigures 主数据库 配置选项 6 syscurconfigs 主数据库 当前配置选项 7 sysdatabases 主数据库 服务器中的数据库 8 syslanguages 主数据库 语言 9 syslogins 主数据库 登陆帐号信息 10 sysoledbusers 主数据库 链接服务器登陆信息 11 sysprocesses 主数据库 进程 12 sysremotelogins主数据库 远程登录帐号 13 syscolumns 每个数据库 列 14 sysconstrains 每个数据库 限制 15 sysfilegroups 每个数据库 文件组 16 sysfiles 每个数据库 文件 17 sysforeignkeys 每个数据库 外部关键字 18 sysindexs 每个数据库 索引 19 sysmenbers 每个数据库 角色成员 20 sysobjects 每个数据库 所有数据库对象 21 syspermissions 每个数据库 权限 22 systypes 每个数据库 用户定义数据类型 23 sysusers 每个数据库 用户 24 25 26 --用什么方法可以得到一个表中所有的列名。SQl语句。 27 select 列名=name from syscolumns where id=object_id(N‘要查的表名‘) 28 29 use gpStrudy 30 select name="name" from syscolumns where id=object_id(N‘bookTable‘)
goto在T-SQL中的用法
1 /** 2 GOTO语句可以实现无条件跳转 3 语法格式 GOTO lable 其中lable为要跳转到的语句标号 4 遇到GOTO语句时直接跳转到lable标签处继续执行,而goto之后的语句不再执行 5 **/ 6 7 declare @result int=0 8 declare @sn int =0 9 loop_1:--定义标号 10 set @[email protected][email protected] 11 set @[email protected]+1 12 if(@sn<=100) 13 goto loop_1--如果小于100就跳转到loop_1标号处 14 print @result
时间: 2024-11-03 03:16:20