--
SQL Server:
Select
TOP
N
*
From
TABLE
Order
By
NewID
()
开头到N条记录
Top
表
N到M条记录(要有主索引ID)
M
-
N
表Where ID
in
(
M ID
表)
by
ID
Desc
选择10从到15的记录
select
top
5
from
15
table
order
id
asc
) A order
desc
N到结尾记录
表Order
ID
显示最后5条记录,但是显示的顺序必须为5,6,7,8,9,10,而不是10,9,8,7,6,5 如下解决方法:
test
where
id
(
)
通过这个问题也能总结出4-10条,5-100条这种限定一定范围内的sql语句的写法:
<
末端ID
顶端ID
+
1
>
表名
ID
not
) ID
例如:4-10条就应该写成
10
4
test)
上一篇: select top 1 * from [news_table] where [新闻标识列]<当前id号 where ......
下一篇: select top 1 * from [news_table] where [新闻标识列]>当前id号 where ...... order by [新闻标识列] desc
最新发布的20条信息列表,要求包含:信息ID、信息标题、信息发布时间、信息发布人姓名、信息评论总数和最后评论时间,并且按最后评论时间排序
100
) a.infoID,a.infoTitle,a.infoPubDate,c.userName,
Max
( b.infoReplyDate )
As
最后时间,
Count
( b.infoReplyID )
评论总数
info a
Left
Join
[
InfoReply
]
b
On
a.infoID
=
b.infoID
User
c
a.infoPubUser
c.userNo
And
b.infoReplyUser
Group
a.infoPubDate,a.infoID,a.infoTitle,c.userName
( a.infoPubDate )
一个表中的
Id
有多个记录,把所有这个
的记录查出来,并显示共有多少条记录数。
------------------------------------------
select id, Count
(
*) from tb group by id having count(*)>1
两条记录完全相同,如何删除其中一条
set
rowcount
delete
thetablename
id
@duplicate_id
@duplicate_id为重复值的id
模糊查询
product
detail
like
'
%123.jpg%
替换字段里面部分内容
update
detail
replace
cast
(detail
as
varchar
8000
)),
abc.jpg
,
efg.jpg
)
日期转换参数,值得收藏
CONVERT
,
getdate
(),
120
)
2004
09
12
11
:
06
08
),
''
),
20040912110608
) ,
111
/
112
20040912
102
2004.09
.
一个月第一天
SELECT
DATEADD
(mm,
DATEDIFF
(mm,
()),
)
2009-06-01 00:00:00.000
当天
product
DateDiff
day
,modiDate,
GetDate
())
如何查询本日、本月、本年的记录SQL
本年:
loanInfo
year
(date)
())
本月:
getDate
month
本日:
and
Day
())
本周的星期一
(wk,
(wk,
()),
一年的第一天
(yy,
(yy,
季度的第一天
(qq,
(qq,
当天的半夜
(dd,
(dd,
上个月的最后一天
这是一个计算上个月最后一天的例子。它通过从一个月的最后一天这个例子上减去毫秒来获得。有一点要记住,在Sql Server中时间是精确到毫秒。这就是为什么我需要减去毫秒来获得我要的日期和时间。
dateadd
(ms,
3
(mm,
))
计算出来的日期的时间部分包含了一个Sql Server可以记录的一天的最后时刻(“:
59
997
”)的时间。
去年的最后一天
连接上面的例子,为了要得到去年的最后一天,你需要在今年的第一天上减去毫秒。
本月的最后一天
现在,为了获得本月的最后一天,我需要稍微修改一下获得上个月的最后一天的语句。修改需要给用DATEDIFF比较当前日期和“
”返回的时间间隔上加。通过加个月,我计算出下个月的第一天,然后减去毫秒,这样就计算出了这个月的最后一天。这是计算本月最后一天的SQL脚本。
(m,
,
本年的最后一天
你现在应该掌握这个的做法,这是计算本年最后一天脚本
))。
本月的第一个星期一
好了,现在是最后一个例子。这里我要计算这个月的第一个星期一。这是计算的脚本。
,
datepart
()),
())
),
)
在这个例子里,我使用了“本周的星期一”的脚本,并作了一点点修改。修改的部分是把原来脚本中“
()”部分替换成计算本月的第天,在计算中用本月的第天来替换当前日期使得计算可以获得这个月的第一个星期一。
删除一个月前,三个月前, 6个月前,一年前的数据
DELETE
FROM
表名WHERE
datediff
(MM, AddTime,
GETDATE
(YY, AddTime,
-------------------------------------------------------------
附录,其他日期处理方法
)去掉时分秒
declare
@
datetime
()
'2003-7-1 10:00:00'
@,
,@),
2
)显示星期几
datename
(weekday,
())
)如何取得某个月的天数
@m
int
月份
2003-
-15
,
另外,取得本月天数
())
任意月份的最大天数
Dateadd
))))
或者使用计算本月的最后一天的脚本,然后用DAY函数区最后一天
)))
)判断是否闰年:
case
))))
when
28
then
平年
else
闰年
end
或者
-02-01
)一个季度多少天
tinyint
@time
smalldatetime
between
7
convert
-01
))
、确定某年某月有多少天
实现原理:先利用DATEDIFF取得当前月的第一天,再将月份加一取得下月第一天,然后减去分钟,再取日期的天数部分,即为当月最大日期,也即当月天数
CREATE
FUNCTION
DaysInMonth (
@date
)
Returns
AS
BEGIN
RETURN
(mi,
(m,
)))
END
调用示例:
dbo.DaysInMonth (
2006-02-03
)计算哪一天是本周的星期一
(week,
(week,
1900-01-01
()),
返回-11-06 00:00:00.000
或
)
)当前季度的第一天
(quarter,
(quarter,
)—返回
00
)一个季度多少天
)) —返回
.按姓氏笔画排序:
TableName
CustomerName Collate Chinese_PRC_Stroke_ci_as
.分页SQL语句
(row_number()
OVER
ORDER
BY
tab.ID
))
rownum,tab.
表名As tab)
t
rownum
起始位置And 结束位置
.如何修改数据库的名称:
sp_renamedb
old_name
new_name
.获取当前数据库中的所有用户表
sysobjects
xtype
U
category
.获取某一个表的所有字段
name
syscolumns
object_id
.查看与某一个表相关的视图、存储过程、函数
a.
sysobjects a, syscomments b
a.id
b.id
b.
text
%表名%
.查看当前数据库中所有存储过程
存储过程名称from sysobjects
P
.查询用户创建的所有数据库
master..sysdatabases D
sid
master..syslogins
name
sa
或者
dbid, name
DB_NAME
master..sysdatabases
<>
0x01
.查询某一个表的字段和数据类型
column_name,data_type
information_schema.columns
table_name
.使用事务
在使用一些对数据库表的临时的SQL语句操作时,可以采用SQL SERVER事务处理,防止对数据操作后发现误操作问题
开始事务
Begin
tran
Insert
Into
Values
(…)
SQL语句操作不正常,则回滚事务。
回滚事务
Rollback
SQL语句操作正常,则提交事务,数据提交至数据库。
提交事务
Commit
计算执行SQL语句查询时间
@d
SYS_ColumnProperties
语句执行花费时间(毫秒)
【关闭SQL Server 数据库所有使用连接】
use
master
go
create
proc
KillSpByDbName(
@dbname
20
begin
@sql
nvarchar
500
@temp
1000
@spid
declare getspid cursor for
select spid from sysprocesses where dbid=db_id(
'''
exec
(
open
getspid
fetch
next
into
while
@@fetch_status
<>-
kill
rtrim
close
deallocate
举例使用,关闭数据库下的所有连接操作
Use
master
Exec
KillSpByDbName
数据库名称
(一)挂起操作
在安装Sql或sp补丁的时候系统提示之前有挂起的安装操作,要求重启,这里往往重启无用,解决办法:
到HKEY_LOCAL_MACHINESYSTEMCurrentControlSetControlSession Manager
删除PendingFileRenameOperations
(二)收缩数据库
重建索引
DBCC
REINDEX
INDEXDEFRAG
收缩数据和日志
SHRINKDB
SHRINKFILE
(三)压缩数据库
dbcc
shrinkdatabase(dbname)
(四)转移数据库给新用户以已存在用户权限
sp_change_users_login update_one,newname,oldname
(五)检查备份集
RESTORE
VERIFYONLY
disk
Evbbs.bak
(六)修复数据库
ALTER
DATABASE
dvbbs
SET
SINGLE_USER
GO
CHECKDB(dvbbs,repair_allow_data_loss)
WITH
TABLOCK
MULTI_USER
m
tablename
n id
tablename)
临时表(或表变量)
columnname
将top m笔插入
n
表变量order
columnname) a
复制表(只复制结构,源表名:a 新表名:b) (Access可用)
法一:
b
a
法二:
拷贝表(拷贝数据,源表名:a 目标表名:b) (Access可用)
insert
b(a, b, c)
d,e,f
b;
跨数据库之间表的拷贝(具体数据使用绝对路径) (Access可用)
‘具体数据库’
条件
例子:..
"&Server.MapPath(".")&"/data.mdb" &"
..
子查询(表名:a 表名:b)
a,b,c
IN
d
b ) 或者:
显示文章、提交人和最后回复时间
a.title,a.username,b.adddate
a,(
max
(adddate) adddate
.title
a.title) b
外连接查询(表名:a 表名:b)
a.a, a.b, a.c, b.c, b.d, b.f
LEFT
OUT
JOIN
ON
a.a
b.c
在线视图查询(表名:a )
a) T
t.a
;
between的用法,between限制查询数据范围时包括了边界值,
between不包括
table1
time
time1
time2
a,b,c,
数值and 数值
的使用方法
(‘值’,’值’,’值’,’值’)
两张关联表,删除主表中已经在副表中没有的信息
exists
(
table2
table1.field1
table2.field1 )
四表联查问题:
left
inner
join
on
a.a
b.b
right
c
c.c
d.d
..
日程安排提前五分钟提醒
SQL:
日程安排where
minute
,f开始时间,
一条sql 语句搞定数据库分页
主键字段,排序字段from 表名order
排序字段desc) a,表名b
b.主键字段
a.主键字段order
a.排序字段
选择在每一组b值相同的数据中对应的a最大的记录的所有信息(类似这样的用法可以用于论坛每月排行榜,每月热销产品分析,按科目成绩排名,等等.)
tablename ta
a
(a)
tablename tb
tb.b
ta.b)
包括所有在TableA 中但不在TableB和TableC 中的行并消除所有重复行而派生出一个结果表
tableA )
except
tableB)
tableC)
随机取出条数据
newid
随机选择记录
删除重复记录
Delete
(id)
group
col1,col2,)
distinct
#Tmp
TB
drop
TB
#Tmp
在几千条记录里,存在着些相同的记录,如何能用SQL语句,删除掉重复的呢?
、查找表中多余的重复记录,重复记录是根据单个字段(peopleId)来判断
people
peopleId
(
peopleId
people
having
count
(peopleId)
)
、删除表中多余的重复记录,重复记录是根据单个字段(peopleId)来判断,只留有rowid最小的记录
people
peopleId
peopleId
rowid
min
(rowid)
(peopleId )
、查找表中多余的重复记录(多个字段)
vitae a
(a.peopleId,a.seq)
(
peopleId,seq
vitae
peopleId,seq
、删除表中多余的重复记录(多个字段),只留有rowid最小的记录
、查找表中多余的重复记录(多个字段),不包含rowid最小的记录
float字段保留一位小数,四舍五入
DECIMAL
18
1024.791454
----- 1024.8 (所影响的行数为1 行)
<%
# Eval("字段")
==
null
?"":Eval("字段").toString("
")
%>