--
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("
")
%>