use hailan
go
select * from news order by date desc
select top 1 date from news order by date desc
select datepart(yyyy,[date]) from news
SELECT DATEPART(yyyy-mm-dd, 0)
select * from news where DateDiff(day,(select top 1 date from news order by date desc),date)>7
select * from news where DateDiff(day,(select top 1 date from news order by date desc))>7
select * from news where datediff(day,date,(select top 1 date from news order by date desc))<=7 order by date desc--七天之内
select * from news where date >= convert(varchar(10),getdate() - 7,120) --最近七天
select * from news where month(date)=month(getdate())-1 --上个月
--UNION 运算符
--将两个或更多查询的结果组合为单个结果集,该结果集包含联合查询中的所有查询的全部行。这与使用联接组合两个表中的列不同。
--使用 UNION 组合两个查询的结果集的两个基本规则是: 所有查询中的列数和列的顺序必须相同。数据类型必须兼容。
--UNION 指定组合多个结果集并将其作为单个结果集返回。不包括重复行。
--ALL 在结果中包含所有的行,包括重复行。如果没有指定,则删除重复行。
--示例:
select * from about where id =1 union all select * from about where id=2
--(批量插入)一次插入多条数据时下面这种方法(用union all)效率高。应用场景满足这两个条件时才适合用union的写法:1、表不能有主键或者主键是数据库默认的(sql用自动递增列,oracle用序列)
--2、组合sql语句时只能直接用字符串连接,不能用参数化sql语句的写法(就是在组合的sql中用@parm做占位符,再给Command对象添加Parameter); 以上两条任意一条不满足,效率的提高都不明显。
--示例
insert into about select '','','df' union all select '','','dfs'
--DATEDIFF 返回跨两个指定日期的日期和时间边界数。
--语法 DATEDIFF ( datepart , startdate , enddate )
--DATEPART 返回代表指定日期的指定日期部分的整数。
--语法 DATEPART ( datepart , date ) 注释:DAY、MONTH、和 YEAR 函数分别是 DATEPART(dd, date)、DATEPART(mm, date)、和 DATEPART(yy, date) 的同义词。
--SELECT DATEPART(month, GETDATE())=select month(getdate()) 都是获取当前月份
GO
--学习sql:提高效率。优化sql
http://www.javaeye.com/wiki/topic/232865
http://www.jjxj.com.cn/index1.jsp --站内搜索 点击
http://hi.baidu.com/rxj%5F2008/blog/item/a53ab212c3435f0a5baf534a.html
http://www.xue163.com/html/2008717/743368.html
http://hi.baidu.com/sixlu/blog/item/a4f406238fb50848935807ec.html
-------------------------sql常用语句积累--------------------------
select * from 表 where datediff(day,时间字段,getdate())<=7 --查询七天之内的信息
select * from news where datediff(day,date,(select top 1 date from news order by date desc))<=7 order by date desc --七天之内 (示例)
select * from 表 where datediff(day,时间字段,getdate())<=datepart(weekday,getdate()) --查询本周的信息
select * from news where datediff(day,date,(select top 1 date from news order by date desc))<datepart(weekday,(select top 1 date from news order by date desc)) --最近一周(示例)
select * from news where datediff(day,date,getdate())<datepart(weekday,getdate()) --查询本周的信息(示例)
select DATEDIFF(month, date, GETDATE()) AS MONTHS from news
select * from news order by newid() --对查询结果随机排序(示例)
select * from news order by title Collate Chinese_PRC_Stroke_ci_as --按姓氏笔画排序(示例)
select * from news order by title Collate Chinese_PRC_CS_AS_KS_WS --按拼音首字母排序(示例)
--1.如何删除表中的重复记录?(这里指记录的每个字段都要相同)
select distinct * into #temp from tab
delete tab
insert tab select * from #temp
drop table #temp
--2.怎样返回数据库中用户表的表单名
select name from sysobjects where xtype='U'
select name from sysobjects where xtype = 'u' and status >=0
--3.返回两个表中共有的所有记录
select * from testTable as a inner join TestTableChild as b on a.id = b.parentid
--4.返回两个表里共有的记录,且不重复
select a.id,a.name,b.name from testTable as a inner join TestTableChild as b on a.id = b.parentid group by a.id,a.name,b.name
--5.向一个表A中插入记录,并且插入的记录在A中不存在(通过一个字段来判断)
insert into trace_users (tracekey,muteSMS,CreateTime,traceuser,tracetime,traceSlot,traceduration) Select 'TRACE_TIMER',0,getdate(),mobileid,getdate(),'30','0' from Epm_EmployeeList where corpid = 10001 and not exists (select traceuser from trace_users ) and mobileid like '13%' and len(mobileid) = 11
--6、根据出生日期,算出年龄
DATEDIFF(month, T.Birthday, GETDATE()) AS MONTHS --得到月份
MONTHS /12 --取整就是年龄
--7、等待时间再执行语句
waitfor delay '00:00:05'
select * from studentinfowaitfor time ’23:08:00
select * from employee
--8、指定值的范围查询
stockname like '[a-zA-Z]%' --------- ([]指定值的范围)
stockname like '[^F-M]%' --------- (^排除指定范围)
--9、从表中获取值并插入另一张表中
insert into table2 (a) select a from table1
--10、备份与恢复数据库
backup database SCardDB to disk = 'F:/SCardDB.2006年10月10日(105748).bak'restore database kangda from disk='d:/backup.bak‘
--11、对查询结果随机排序
SELECT * FROM Northwind..Orders ORDER BY NEWID()
--12、按姓氏笔画排序
Select * From TableName Order By 列名 Collate Chinese_PRC_Stroke_ci_as
--13获取某一个表的所有字段
select name from syscolumns where id=object_id('表名')
--14、记录转换
select *,case Type when 1 then '移动' when 2 then '联通' when 3 then '小灵通' end as TypeName from abc
--15、按拼音首字母排序
select * from 表名 order by 列名 Collate Chinese_PRC_CS_AS_KS_WS