当前位置:Gxlcms > 数据库问题 > SQL经典短小代码收集

SQL经典短小代码收集

时间:2021-07-01 10:21:17 帮助过:15人阅读

 

--显示最后5条记录,但是显示的顺序必须为5,6,7,8,9,10,而不是10,9,8,7,6,5 如下解决方法: select top 5 from test where id in(select top 5 from test order by id desc) order by id asc
--通过这个问题也能总结出4-10条,5-100条这种限定一定范围内的sql语句的写法: select top <末端ID-顶端ID+1> * from <表名> where ID not in(select top <顶端ID-1>) ID from <表名>)
--例如:4-10条就应该写成 select top 10-4+1 * from test where id not in(select top 4-1 id from test)

 

 上一篇: select top 1 * from [news_table] where [新闻标识列]<当前id号 where ......  下一篇: select top 1 * from [news_table] where [新闻标识列]>当前id号 where ...... order by [新闻标识列] desc --两条记录完全相同,如何删除其中一条 set rowcount=1  delete from thetablename where id=@duplicate_id--@duplicate_id为重复值的id 
--模糊查询 select *  from product where detail like %123.jpg% --替换字段里面部分内容 update product set detail=replace(cast(detail as varchar(8000)),abc.jpg,efg.jpg
 
--日期转换参数,值得收藏 select CONVERT(varchargetdate(), 120 ) 2004-09-12 11:06:08 
select replace(replace(replace(CONVERT(varchargetdate(), 120 ),-,‘‘), ,‘‘),:,‘‘) 20040912110608
select CONVERT(varchar(12) , getdate(), 111 ) 2004/09/12
select CONVERT(varchar(12) , getdate(), 112 ) 20040912
select CONVERT(varchar(12) , getdate(), 102 ) 2004.09.12
 
--一个月第一天 SELECT   DATEADD(mm,   DATEDIFF(mm,0,getdate()),   0)  --  2009-06-01 00:00:00.000 --当天 select  * from product  where DateDiff(day,modiDate,GetDate())>1 
--如何查询本日、本月、本年的记录SQL 本年: select * from loanInfo where year(date)=year(getdate())  本月: select * from loanInfo where year(date)=year(getDate()) And month(date)=month(getdate())  本日: select * from loanInfo where year(date)=year(getDate()) And month(date)=month(getdate()) and Day(date)=Day(getDate())   
本周的星期一   SELECT  DATEADD(wk,  DATEDIFF(wk,0,getdate()),  0)     一年的第一天  SELECT  DATEADD(yy,  DATEDIFF(yy,0,getdate()),  0)     季度的第一天   SELECT  DATEADD(qq,  DATEDIFF(qq,0,getdate()),  0)     当天的半夜   SELECT  DATEADD(dd,  DATEDIFF(dd,0,getdate()),  0)     上个月的最后一天           这是一个计算上个月最后一天的例子。它通过从一个月的最后一天这个例子上减去毫秒来获得。有一点要记住,在Sql  Server中时间是精确到毫秒。这就是为什么我需要减去毫秒来获得我要的日期和时间。           SELECT  dateadd(ms,-3,DATEADD(mm,  DATEDIFF(mm,0,getdate()),  0))            计算出来的日期的时间部分包含了一个Sql  Server可以记录的一天的最后时刻(“:59:59:997”)的时间。    去年的最后一天           连接上面的例子,为了要得到去年的最后一天,你需要在今年的第一天上减去毫秒。           SELECT  dateadd(ms,-3,DATEADD(yy,  DATEDIFF(yy,0,getdate()),  0))     本月的最后一天           现在,为了获得本月的最后一天,我需要稍微修改一下获得上个月的最后一天的语句。修改需要给用DATEDIFF比较当前日期和“-01-01”返回的时间间隔上加。通过加个月,我计算出下个月的第一天,然后减去毫秒,这样就计算出了这个月的最后一天。这是计算本月最后一天的SQL脚本。           SELECT  dateadd(ms,-3,DATEADD(mm,  DATEDIFF(m,0,getdate())+1,  0))     本年的最后一天           你现在应该掌握这个的做法,这是计算本年最后一天脚本           SELECT  dateadd(ms,-3,DATEADD(yy,  DATEDIFF(yy,0,getdate())+1,  0))。    本月的第一个星期一           好了,现在是最后一个例子。这里我要计算这个月的第一个星期一。这是计算的脚本。             select  DATEADD(wk,  DATEDIFF(wk,0,                                                                                          dateadd(dd,6-datepart(day,getdate()),getdate())                                                                                                          ),  0)                                    在这个例子里,我使用了“本周的星期一”的脚本,并作了一点点修改。修改的部分是把原来脚本中“getdate()”部分替换成计算本月的第天,在计算中用本月的第天来替换当前日期使得计算可以获得这个月的第一个星期一。 
--删除一个月前,三个月前, 6个月前,一年前的数据  DELETE FROM 表名WHERE datediff(MM, AddTime,GETDATE()) > 1 DELETE FROM 表名WHERE datediff(MM, AddTime,GETDATE()) > 3 DELETE FROM 表名WHERE datediff(MM, AddTime,GETDATE()) > 6 DELETE FROM 表名WHERE datediff(YY, AddTime,GETDATE()) > 1
---------------------------------------------------------------   附录,其他日期处理方法    1)去掉时分秒  declare  @  datetime   set  @  =  getdate()  --‘2003-7-1  10:00:00‘   SELECT  @,DATEADD(day,  DATEDIFF(day,0,@),  0)     2)显示星期几  select  datename(weekday,getdate())       3)如何取得某个月的天数  declare  @m  int   set  @m=2  --月份  select    datediff(day,2003-+cast(@m  as  varchar)+-15  ,2003-+cast(@m+1    as  varchar)+-15)  
另外,取得本月天数  select    datediff(day,cast(month(GetDate())  as  varchar)+-+cast(month(GetDate())  as  varchar)+-15  ,cast(month(GetDate())  as  varchar)+-+cast(month(GetDate())+1    as  varchar)+-15)  
任意月份的最大天数 select  day(dateadd(dd,-1,dateadd(mm,1,Dateadd(mm,datediff(mm,0,getdate()),0)))) 
或者使用计算本月的最后一天的脚本,然后用DAY函数区最后一天  SELECT  Day(dateadd(ms,-3,DATEADD(mm,  DATEDIFF(m,0,getdate())+1,  0)))     4)判断是否闰年: 
SELECT  case  day(dateadd(mm,  2,  dateadd(ms,-3,DATEADD(yy,  DATEDIFF(yy,0,getdate()),  0))))  when  28  then  平年  else  闰年  end  
或者  select  case  datediff(day,datename(year,getdate())+-02-01,dateadd(mm,1,datename(year,getdate())+-02-01))   when  28  then  平年  else  闰年  end     5)一个季度多少天  declare  @m  tinyint,@time  smalldatetime   select  @m=month(getdate())   select  @m=case  when  @m  between  1  and  3  then  1                          when  @m  between  4  and  6  then  4                          when  @m  between  7  and  9  then  7                          else  10  end   select  @time=datename(year,getdate())+-+convert(varchar(10),@m)+-01   select  datediff(day,@time,dateadd(mm,3,@time))   
 
 1、确定某年某月有多少天
实现原理:先利用DATEDIFF取得当前月的第一天,再将月份加一取得下月第一天,然后减去分钟,再取日期的天数部分,即为当月最大日期,也即当月天数
CREATE FUNCTION DaysInMonth ( @date datetime ) Returns int AS BEGIN  RETURN Day(dateadd(mi,-3,DATEADD(m, DATEDIFF(m,0,@date)+1,0))) END
调用示例:
select dbo.DaysInMonth (2006-02-03
(2)计算哪一天是本周的星期一
SELECT DATEADD(week, DATEDIFF(week,1900-01-01,getdate()), 1900-01-01)  --返回-11-06 00:00:00.000 SELECT DATEADD(week, DATEDIFF(week,0,getdate()),0)      
(3)当前季度的第一天
SELECT DATEADD(quarter, DATEDIFF(quarter,0,getdate()), 0)—返回-10-01 00:00:00.000 
(4)一个季度多少天
declare @m tinyint,@time smalldatetime 
select @m=month(getdate())  select @m=case when @m between 1 and 3 then 1                         when @m between 4 and 6 then 4                         when @m between 7  and 9 then 7                         else 10 end 
select @time=datename(year,getdate())+-+convert(varchar(10),@m)+-01  select datediff(day,@time,dateadd(mm,3,@time)) —返回

 
1.按姓氏笔画排序:  Select * From TableName Order By CustomerName Collate Chinese_PRC_Stroke_ci_as 
2.分页SQL语句 select * from(select (row_number() OVER (ORDER BY tab.ID Desc)) as rownum,tab.* from 表名As tab) As t where rownum between 起始位置And 结束位置
8.如何修改数据库的名称:
sp_renamedb old_namenew_name 
3.获取当前数据库中的所有用户表 select * from sysobjects where xtype=U and category=0 
4.获取某一个表的所有字段 select name from syscolumns where id=object_id(表名
5.查看与某一个表相关的视图、存储过程、函数 select a.* from sysobjects a, syscomments b where a.id = b.id and b.text like %表名% 
6.查看当前数据库中所有存储过程 select name as 存储过程名称from sysobjects where xtype=P 
7.查询用户创建的所有数据库 select * from master..sysdatabases D where sid not in(select sid from master..syslogins where name=sa)  或者 select dbid, name AS DB_NAME from master..sysdatabases where sid <> 0x01 
8.查询某一个表的字段和数据类型 select column_name,data_type from information_schema.columns where table_name = 表名 
 
 
9.使用事务 在使用一些对数据库表的临时的SQL语句操作时,可以采用SQL SERVER事务处理,防止对数据操作后发现误操作问题
开始事务 Begin tran  Insert Into TableName Values(…)  SQL语句操作不正常,则回滚事务。
回滚事务 Rollback tran  SQL语句操作正常,则提交事务,数据提交至数据库。
提交事务 Commit tran 
计算执行SQL语句查询时间
declare @d datetime  set @d=getdate()  select * from SYS_ColumnProperties select [语句执行花费时间(毫秒)]=datediff(ms,@d,getdate()) 

【关闭SQL Server 数据库所有使用连接】

人气教程排行