小男孩‘自慰网亚洲一区二区,亚洲一级在线播放毛片,亚洲中文字幕av每天更新,黄aⅴ永久免费无码,91成人午夜在线精品,色网站免费在线观看,亚洲欧洲wwwww在线观看

分享

SQL Server取系統(tǒng)當(dāng)前時(shí)間

 芥納須彌 2015-04-21

getdate //獲得系統(tǒng)當(dāng)前日期


datepart //獲取日期指定部分(年月日時(shí)分表)

getdate()函數(shù):取得系統(tǒng)當(dāng)前的日期和時(shí)間。返回值為datetime類型的。

用法:getdate()

例子:

select getdate() as dte,dateadd(day,-1,getdate()) as nowdat

輸出結(jié)果:

dte nowdat 
--------------------------- ---------------------------
1999-11-21 19:13:10.083 1999-11-20 19:13:10.083

(1 row(s) affected)

datepart()函數(shù):以整數(shù)的形式返回時(shí)間的指定部分。

用法:datepart(datepart,date)

參數(shù)說(shuō)明:datepart時(shí)要返回的時(shí)間的部分,常用取值year、month、day、hour、minute。

date是所指定的時(shí)間。

例子:

SELECT DATEPART(month, GETDATE()) AS 'Month Number'

輸出結(jié)果:

Month Number

------------

11

(1 row(s) affected)

dateadd()函數(shù):通過(guò)給指定的時(shí)間的指定部分加上一個(gè)整數(shù)值以返回一個(gè)新時(shí)間值。

用法:dateadd(datepart,number,date)

參數(shù)說(shuō)明:datepart(同上)

date(同上)

number要增加的值,整型,可正可負(fù),正值返回date之后的時(shí)間值,負(fù)值返回date

之前的時(shí)間值

例子:

select getdate() as today

select dateadd(day,-1,getdate())

select dateadd(day,1,getdate())

輸出:

today

---------------------------

1999-11-21 19:42:41.410

(1 row(s) affected)

yesterday

---------------------------

1999-11-20 19:42:41.410

(1 row(s) affected)

tomorrow

---------------------------

1999-11-22 19:42:41.410

(1 row(s) affected)

datediff()函數(shù):返回兩個(gè)時(shí)間以指定時(shí)間部分來(lái)計(jì)算的差值。返回整數(shù)值。如1991-6-12和1991-6-21之間以天

來(lái)算相差9天,1998-6-12和1999-6-23按年算相差1年,1999-12-1和1999-3-12按月算相差9個(gè)月

用法:datediff(darepart,date1,date2)

參數(shù)說(shuō)明:datepart(同上)

date1、date2(同上date)

例子:

select datediff(month,'1991-6-12','1992-6-21') as a

輸出:

a

-----------

12

(1 row(s) affected)

SQL server2005常用的函數(shù)和分頁(yè)的幾個(gè)解決方案:

使用時(shí)間和日期的函數(shù)
getdate():獲取系統(tǒng)當(dāng)前時(shí)間
dateadd(datepart,number,date):計(jì)算在一個(gè)時(shí)間的基礎(chǔ)上增加一個(gè)時(shí)間后的新時(shí)間值,比如:dateadd(yy,30,getdate())
datediff(datepart,startdate,enddate):計(jì)算兩個(gè)時(shí)間的差值,比如:datediff(yy,getdate(),'2008-08-08')
dataname(datepart,date):獲取時(shí)間不同部分的值,返回值為字符串
datepart(datepart,date):和datename相似,只是返回值為整型
day(date):獲取指定時(shí)間的天數(shù)
month(date):獲取指定時(shí)間的月份
year(date):獲取指定時(shí)間的年份

問(wèn)題1:
表A是一個(gè)不斷有新記錄增加的表,字段t就是記錄的插入時(shí)間,現(xiàn)在想知道每10秒鐘插入到該表的
記錄總數(shù)大于N條的時(shí)間和記錄條數(shù),并按由大到小的順序排序,請(qǐng)寫出完成該功能的SQL語(yǔ)句。
解決方案:
declare @t datetime
select @t=min(t) from B
select max(t) as maxT,min(t) as minT,count(*) as Num from B group by 
datediff(ss,@t,t)/10 having count(*)>1 order by count(*) desc

全局變量:
以@@開頭,且不能由用戶自定義,下面來(lái)看幾個(gè)常用的全局變量:
@@rowcount :表示最近一個(gè)語(yǔ)句影響的行數(shù)。
@@error:上一條sql語(yǔ)句返回的錯(cuò)誤信息。
@@identity:對(duì)有標(biāo)識(shí)列的表而言,系統(tǒng)會(huì)為表每生成一個(gè)新的標(biāo)識(shí)號(hào),這個(gè)變量記錄的就是最近產(chǎn)生的id。

rowcount:會(huì)話級(jí)全局變量,比如set rowcount 3 ,就是設(shè)置返回的記錄數(shù)最多是3條,此變量的作用類似于
top子句,TOP 子句適用于指定了該子句的單個(gè) SELECT 語(yǔ)句。SET ROWCOUNT 將一直有效,直到執(zhí)行另一個(gè) 
SET ROWCOUNT 語(yǔ)句,例如 SET ROWCOUNT 0 將關(guān)閉該選項(xiàng)。

indetity_insert:會(huì)話級(jí)全局變量
任何時(shí)候,一個(gè)會(huì)話中只有一個(gè)表的 IDENTITY_INSERT 屬性可以設(shè)置為 ON。如果某個(gè)表已將此屬性設(shè)
置為 ON,則對(duì)另一個(gè)表發(fā)出 SET IDENTITY_INSERT ON 語(yǔ)句時(shí),SQL Server 2005 將返回一個(gè)錯(cuò)誤信息,
指出 SET IDENTITY_INSERT 已設(shè)置為 ON,并報(bào)告已將其屬性設(shè)置為 ON 的表。
如果插入值大于表的當(dāng)前標(biāo)識(shí)值,則 SQL Server 自動(dòng)將新插入值作為當(dāng)前標(biāo)識(shí)值使用。
SET IDENTITY_INSERT 的設(shè)置是在執(zhí)行或運(yùn)行時(shí)設(shè)置的,而不是在分析時(shí)設(shè)置的。
dbcc checkident (table_name,reseed,n):此語(yǔ)句的功能是更正列的當(dāng)前標(biāo)識(shí)值,把table_name的標(biāo)
識(shí)符設(shè)置為n。如果當(dāng)標(biāo)識(shí)列中存在 PRIMARY KEY 或 UNIQUE 約束時(shí),無(wú)效標(biāo)識(shí)信息會(huì)導(dǎo)致錯(cuò)誤消息 2627。

SQL Server的幾個(gè)分頁(yè)解決方案:
解決方案1:
declare @pageIndex int,@pageSize int,@recordNum int
set @pageIndex=3
set @pageSize=3
select top(@pageSize) * from Grade where id not in (select top 
((@pageIndex-1)*@pageSize) id from Grade)//顯示出第 7 到 第 9 條

select @recordNum=count(*) from Grade//顯示總記錄數(shù)

點(diǎn)評(píng):效率不高,而且取出來(lái)的數(shù)據(jù)是按id排序的。如果想按其他字段排序就不行。

解決方案二:
declare @id int
--set rowcount 3
--select @id=id from Grade
select top 3 @id=id from Grade//這句等效于上面注視的兩句
select top 3 * form Grade where id>@id//查詢出第 4 到第 6 條記錄

點(diǎn)評(píng):效率比方案一稍高,但是取出來(lái)的數(shù)據(jù)是也按id排序的。如果想按其他字段排序就不行

解決方案三:
create table #table(new_id int identity(1,1) primary key,id int)
insert into #table(id) select id from grade
select a.* from grade a join #table b on (b.new_id between 6 and 9) and a.id=b.id
//取出第 6 到第 9 條,
點(diǎn)評(píng):其原理是把要分頁(yè)的表的主鍵插入到臨時(shí)表中,臨時(shí)表的字段就是一個(gè)標(biāo)識(shí)列和要分
頁(yè)的表的主鍵列(包括是多個(gè)主鍵的情況,上面的兩種方法就不行)。特點(diǎn)是效率高,取出
來(lái)的數(shù)據(jù)能根據(jù)自己要求的字段排序。

臨時(shí)表:
上面的解決方案三就是使用了臨時(shí)表,它與永久表相似,但臨時(shí)表存儲(chǔ)在 tempdb 中,當(dāng)不
再使用時(shí)會(huì)自動(dòng)刪除。
臨時(shí)表有兩種類型:本地和全局。它們?cè)诿Q、可見(jiàn)性以及可用性上有區(qū)別。本地臨時(shí)表
的名稱以單個(gè)數(shù)字符號(hào) (#) 打頭;它們僅對(duì)當(dāng)前的用戶連接是可見(jiàn)的;當(dāng)用戶從 SQL Server
實(shí)例斷開連接時(shí)被刪除。全局臨時(shí)表的名稱以兩個(gè)數(shù)字符號(hào) (##) 打頭,創(chuàng)建后對(duì)任何用戶
都是可見(jiàn)的,當(dāng)所有引用該表的用戶從 SQL Server 斷開連接時(shí)被刪除。

表級(jí)變量:
象上面分頁(yè)的例子也可以使用表級(jí)變量,象下面這樣:

declare @table table (newid int identiey(1,1),id int)
insert into @table(id) select id from grade
select a.* from grade a join @table b on (b.new_id between 6 and 9) and a.id=b.id
這種方式比使用臨時(shí)表分頁(yè)效率更高。

字符串函數(shù):
left(stringExp,intExp):取字符串左邊多少個(gè)字符
len(strExp):計(jì)算指定字符串的長(zhǎng)度
char(intExp):根據(jù)指定字符的ASCII碼返回相應(yīng)的字符
ascii(strExp):將一個(gè)字符轉(zhuǎn)換成相應(yīng)的ascii碼
lower(strExp):將字符串轉(zhuǎn)換為小寫
Upper(strExp):將字符串轉(zhuǎn)換為大寫
Ltrim(strExp):去字符串左邊的空格
rtrim(strExp):去字符串右邊的空格
substring(strExp,intExp,intExp):按指定的索引截取一個(gè)字符串的子字符串
replace(strExp,strOldStr,strNewStr):將字符串中的部分內(nèi)容用新的字符串來(lái)代替


系統(tǒng)其他轉(zhuǎn)換函數(shù):
isnull(邏輯表達(dá)式,代替值):判斷邏輯表達(dá)式是否為null,是的話就用指定的值代替。
convert()和cast:
CAST 函數(shù)和 CONVERT 函數(shù)還可用于獲取各種特殊數(shù)據(jù)格式,并可用于選擇列表、WHERE 
子句以及允許使用表達(dá)式的任何位置中。如果希望 Transact-SQL 程序代碼符合 SQL-92,
請(qǐng)使用 CAST 而不要使用 CONVERT。如果要利用 CONVERT 中的功能,請(qǐng)使用 CONVERT 
而不要使用 CAST。
使用 CAST 或 CONVERT 時(shí),需要提供以下信息: 
要轉(zhuǎn)換的表達(dá)式;例如,銷售報(bào)表要求銷售數(shù)據(jù)從貨幣數(shù)據(jù)轉(zhuǎn)換為字符數(shù)據(jù)。
要將指定的表達(dá)式轉(zhuǎn)換為的數(shù)據(jù)類型,例如 varchar 或其他 SQL Server 系統(tǒng)數(shù)據(jù)類型。
除非將被轉(zhuǎn)換的值存儲(chǔ)起來(lái),否則轉(zhuǎn)換僅在 CAST 函數(shù)或 CONVERT 函數(shù)的作用時(shí)間范圍內(nèi)有效。
如果轉(zhuǎn)換時(shí)沒(méi)有指定數(shù)據(jù)類型的長(zhǎng)度,則 SQL Server 自動(dòng)將 30 作為長(zhǎng)度值。

問(wèn)題:
有一張商品表,里面三個(gè)字段:購(gòu)買日期,購(gòu)買人,價(jià)格?,F(xiàn)在要統(tǒng)計(jì)每個(gè)購(gòu)買人每一
季度的消費(fèi)總價(jià),并算出小計(jì)(也就是這一年消費(fèi)的總價(jià))

解決方案:

創(chuàng)建一張shop表:
create table shop
(
selldate datetime default(getdate()),
name varchar(20),
price money,
)
加入一些測(cè)試數(shù)據(jù):
insert into shop(selldate,name,price) values('2006-05-12','張三',75)
insert into shop(selldate,name,price) values('2006-07-12','張三',50)
insert into shop(selldate,name,price) values('2006-09-12','張三',43)
insert into shop(selldate,name,price) values('2006-11-12','李四',67)
insert into shop(selldate,name,price) values('2006-01-12','李四',98)
insert into shop(selldate,name,price) values('2006-06-12','李四',100)
insert into shop(selldate,name,price) values('2006-08-12','王五',134)
insert into shop(selldate,name,price) values('2006-04-12','王五',165)
insert into shop(selldate,name,price) values('2006-10-12','王五',85)
insert into shop(selldate,name,price) values('2006-08-12','趙六',11)
insert into shop(selldate,name,price) values('2006-12-12','趙六',165)
insert into shop(selldate,name,price) values('2006-02-12','趙六',17)
insert into shop(selldate,name,price) values('2006-01-12','趙六',198)

select * from shop

解決問(wèn)題的select語(yǔ)句:
select name 姓名,
sum(case when datepart(q,selldate)=1 then price else 0 end) 第一季度,
sum(case when datepart(q,selldate)=2 then price else 0 end) 第二季度,
sum(case when datepart(q,selldate)=3 then price else 0 end) 第三季度,
sum(case when datepart(q,selldate)=4 then price else 0 end) 第四季度,
sum(price) 小計(jì)
from shop group by name
 

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購(gòu)買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類似文章 更多