第八章SQLServer 2012函數(shù)
SQL Server 提供了內(nèi)置函數(shù)幫助用戶執(zhí)行各種操作.內(nèi)置函數(shù)不能修改,可以在T-SQL語句中使用。
內(nèi)置函數(shù)包括:
? 聚合函數(shù)、數(shù)學(xué)函數(shù)、配置函數(shù)、時(shí)間和日期函、字符串函數(shù)、排名函數(shù),等等。
1、聚合函數(shù)
AVG()--平均值
COUNT()--返回行中項(xiàng)目的數(shù)量
MAX()--最大值
MIN()--最小值
SUM()--求和
2、數(shù)學(xué)函數(shù)
ABS (x)--返回絕對值
CEILING(x)--返回大于或等于所給數(shù)字的最小整數(shù)
PI()--pi值
POWER (x,y)--返回x的y次方
RAND ()--返回~1之間的隨機(jī)數(shù)
3、配置函數(shù)
SELECT@@VERSION --獲取當(dāng)前數(shù)據(jù)庫版本
SELECT@@LANGUAGE --當(dāng)前語言
SQLServer 2005 函數(shù)
4、時(shí)間函數(shù)
selectgetdate() ? --當(dāng)前時(shí)間
selectday(getdate()) ? --取出天
selectmonth(getdate()) ? --取出月
selectyear(getdate()) ? --取出年
selectdateadd(d,3,getdate()) as wawa_dateadd --加三天, ?‘d’表示天,‘m’表示月,‘yy’表示年
selectdatename(d,'2010-07-15') ? --取出時(shí)間的某一部分
YearYy yyyy 年1753 ~ 9999
QuarterQq q 季1 ~ 4
MonthMm m 月1 ~ 12
Dayof year Dy y 一年的日數(shù),一年中的第幾日1-366
DayDd d 日,1-31
WeekdayDw w 一周的日數(shù),一周中的第幾日1-7
WeekWk ww 周,一年中的第幾周0 ~ 51
HourHh h 時(shí)0 ~ 23
MinuteMi n 分鐘0 ~59
SecondSs s 秒0 ~ 59
MillisecondMs - 毫秒0 ~ 999
5、字符串函數(shù)
SelectLEN('str1111')--返回字符串的字符個(gè)數(shù)
Selectlower('ABC'),lower('Abc'),upper('Abc'),upper('abc') --轉(zhuǎn)換大小寫
selectltrim(' ? ? ? ? ? 左邊沒有空格') ?--去空格
selectrtrim('右邊沒有空格 ? ') --去空格
selectltrim(rtrim(' ? ?左右都沒有空格 ? ')) --去空格
selectleft('sql server',3),right('sql server',6) --取左或者取右
Selectreplace('原字符串','原','這是一個(gè)')--字符串替換
Selectreplicate('go',5)--指定的次數(shù)重復(fù)字符
selectreverse('這是字符串')--將定字符串返序排列
selectsubstring('這是一個(gè)原字符串',2,3)--指定截取指字字符串
6、排名函數(shù)
rank()返回結(jié)果集的分區(qū)內(nèi)每行的排名
rank()over (order by 列名)
行號函數(shù)
在分頁功能中,記錄需分頁顯示,需要row_number()函數(shù)標(biāo)記行號。
ROW_NUMBER()over(order by id)
sql for xml
FOR XML PATH有的人可能知道有的人可能不知道,其實(shí)它就是將查詢結(jié)果集以XML形式展現(xiàn),有了它我們可以簡化我們的查詢語句實(shí)現(xiàn)一些以前可能需要借助函數(shù)活存儲(chǔ)過程來完成的工作。那么以一個(gè)實(shí)例為主.
一.FORXML PATH 簡單介紹
那么還是首先來介紹一下FORXML PATH ,假設(shè)現(xiàn)在有一張興趣愛好表(hobby)用來存放興趣愛好,表結(jié)構(gòu)如下:

接下來我們來看應(yīng)用FORXML PATH的查詢結(jié)果語句如下:

結(jié)果:

由此可見FORXML PATH 可以將查詢結(jié)果根據(jù)行輸出成XML各式!
那么,如何改變XML行節(jié)點(diǎn)的名稱呢?代碼如下: ? ?

結(jié)果一定也可想而知了吧?沒錯(cuò)原來的行節(jié)點(diǎn)<row>變成了我們在PATH后面括號()中,自定義的名稱<MyHobby>,結(jié)果如下:

這個(gè)時(shí)候細(xì)心的朋友一定又會(huì)問那么列節(jié)點(diǎn)如何改變呢?還記的給列起別名的關(guān)鍵字AS嗎?對了就是用它!代碼如下:

那么這個(gè)時(shí)候我們列的節(jié)點(diǎn)名稱也會(huì)編程我們自定義的名稱<MyCode>與<MyName>結(jié)果如下:

噢!既然行的節(jié)點(diǎn)與列的節(jié)點(diǎn)我們都可以自定義,我們是否可以構(gòu)建我們喜歡的輸出方式呢?還是看代碼:


接下來我們來看一個(gè)FORXML PATH的應(yīng)用場景吧!那么開始吧。。。。。。
二.一個(gè)應(yīng)用場景與FORXML PATH應(yīng)用
首先呢!我們在增加一張學(xué)生表,列分別為(stuID,sName,hobby),stuID代表學(xué)生編號,sName代表學(xué)生姓名,hobby列存學(xué)生的愛好!那么現(xiàn)在表結(jié)構(gòu)如下:

這時(shí),我們的要求是查詢學(xué)生表,顯示所有學(xué)生的愛好的結(jié)果集,代碼如下:

結(jié)果如下:

分析:好的,那么我們來分析一下,首先看這句:

這句是通過FORXML PATH 將某一姓名如張三的愛好,顯示成格式為:“愛好1,愛好2,愛好3,”的格式!
那么接著看:

剩下的代碼首先是將表分組,在執(zhí)行FORXML PATH 格式化,這時(shí)當(dāng)還沒有執(zhí)行最外層的SELECT時(shí)查詢出的結(jié)構(gòu)為:

可以看到StuList列里面的數(shù)據(jù)都會(huì)多出一個(gè)逗號,這時(shí)隨外層的語句:SELECTB.sName,LEFT(StuList,LEN(StuList)-1) as hobby 就是來去掉逗號,并賦予有意義的列明!
