SQLServer学习笔记系列2
SQLServer學(xué)習(xí)筆記系列2
一.寫在前面的話
繼上一次SQLServer學(xué)習(xí)筆記系列1http://www.cnblogs.com/liupeng61624/p/4354983.html以后,繼續(xù)學(xué)習(xí)Sqlserver,一步一步走下去,相信努力終會(huì)
有收獲!一直堅(jiān)信這句話,這個(gè)世界上比你優(yōu)秀的人很多,他們?cè)谀阈菹⒌臅r(shí)候,勤勤懇懇的做著我們看不到的事情,但你回首往事的時(shí)候,真心覺得那段奮
斗的歲月讓你驕傲!年輕就得折騰,年輕就要奮斗!好啦,進(jìn)入正題吧!
二.sql的范圍內(nèi)查找
(1)between.....and用法
通常情況下我們查找一個(gè)在某固定區(qū)域內(nèi)的所有記錄,可以采用>=,<=來寫sql語句,例如:查找訂單價(jià)格在1000到2000之間的所有記錄,可以這樣寫:
1 select * from sales.ordervalues 2 where val>=1000 and val<=2000查詢結(jié)果:
此處的sales.ordervalues來自于定義的視圖,關(guān)于視圖后續(xù)會(huì)講到。
如果采用between.....and.....則可以同樣達(dá)到效果。
1 select * from sales.ordervalues 2 where val between 1000 and 2000注意一點(diǎn):between....and.....是包含邊界的,即此處包含1000和2000這個(gè)邊界值。
(2)in 用法
假如要查找1號(hào)顧客,2號(hào)顧客,9號(hào)顧客訂單信息,一般情況下,我們會(huì)這樣寫:
1 select * from sales.ordervalues 2 where custid=1 or custid=2 or custid=9結(jié)果為:
采用in,則減少了寫法的繁雜,可以這樣如下寫法也能達(dá)到要求。
1 select * from sales.ordervalues 2 where custid in(1,2,9)(3)like用法,用來匹配字符或字符串。
假如要查找雇員表Hr.employees里面lastname里包含a的字符。可以這樣寫:
1 select * from Hr.employees 2 where lastname like '%a%'顯示結(jié)果為:
其中%表示通配符,即可以為任意字符。
三.sql數(shù)據(jù)類型
sql包含多種數(shù)據(jù)類型,滿足多種開發(fā)需求。常見的數(shù)據(jù)類型包括:
(1)二進(jìn)制數(shù)據(jù)類型。
二進(jìn)制數(shù)據(jù)包括?Binary、Varbinary 和 Image。
Binary 數(shù)據(jù)類型既可以是固定長(zhǎng)度的(Binary),也可以是變長(zhǎng)度的。
Binary[(n)] 是 n 位固定的二進(jìn)制數(shù)據(jù)。其中,n 的取值范圍是從 1 到 8000。其存儲(chǔ)窨的大小是 n + 4 個(gè)字節(jié)。
Varbinary[(n)] 是 n 位變長(zhǎng)度的二進(jìn)制數(shù)據(jù)。其中,n 的取值范圍是從 1 到 8000。其存儲(chǔ)窨的大小是 n + 4個(gè)字節(jié),不是n 個(gè)字節(jié)。
在 Image 數(shù)據(jù)類型中存儲(chǔ)的數(shù)據(jù)是以位字符串存儲(chǔ)的,不是由 SQL Server 解釋的,必須由應(yīng)用程序來解釋。例如,應(yīng)用程序可以使用BMP、TIEF、GIF 和 JPEG 格式把數(shù)據(jù)存儲(chǔ)在 Image 數(shù)據(jù)類型中。
(2)字符數(shù)據(jù)類型。
字符數(shù)據(jù)的類型包括?Char,Varchar 和 Text。
字符數(shù)據(jù)是由任何字母、符號(hào)和數(shù)字任意組合而成的數(shù)據(jù)。
Varchar 是變長(zhǎng)字符數(shù)據(jù),其長(zhǎng)度不超過 8KB。Char 是定長(zhǎng)字符數(shù)據(jù),其長(zhǎng)度最多為 8KB。超過 8KB 的ASCII 數(shù)據(jù)可以使用Text數(shù)據(jù)類型存儲(chǔ)。例如,因?yàn)?Html 文檔全部都是 ASCII 字符,并且在一般情況下長(zhǎng)度超過 8KB,所以這些文檔可以 Text 數(shù)據(jù)類型存儲(chǔ)在SQL Server 中。
(3)Unicode數(shù)據(jù)類型。
Unicode 數(shù)據(jù)類型包括?Nchar,Nvarchar 和Ntext。
在 Microsoft SQL Server 中,傳統(tǒng)的非 Unicode 數(shù)據(jù)類型允許使用由特定字符集定義的字符。在 SQL Server安裝過程中,允許選擇一種字符集。使用 Unicode 數(shù)據(jù)類型,列中可以存儲(chǔ)任何由Unicode 標(biāo)準(zhǔn)定義的字符。在 Unicode 標(biāo)準(zhǔn)中,包括了以各種字符集定義的全部字符。使用Unicode數(shù)據(jù)類型,所戰(zhàn)勝的窨是使用非 Unicode 數(shù)據(jù)類型所占用的窨大小的兩倍。?
在 SQL Server 中,Unicode 數(shù)據(jù)以 Nchar、Nvarchar 和 Ntext 數(shù)據(jù)類型存儲(chǔ)。使用這種字符類型存儲(chǔ)的列可以存儲(chǔ)多個(gè)字符集中的字符。當(dāng)列的長(zhǎng)度變化時(shí),應(yīng)該使用Nvarchar 字符類型,這時(shí)最多可以存儲(chǔ) 4000 個(gè)字符。當(dāng)列的長(zhǎng)度固定不變時(shí),應(yīng)該使用 Nchar 字符類型,同樣,這時(shí)最多可以存儲(chǔ)4000 個(gè)字符。當(dāng)使用 Ntext 數(shù)據(jù)類型時(shí),該列可以存儲(chǔ)多于 4000 個(gè)字符。
(4)日期和時(shí)間數(shù)據(jù)類型。
日期和時(shí)間數(shù)據(jù)類型包括?Datetime 和 Smalldatetime兩種類型。
日期和時(shí)間數(shù)據(jù)類型由有效的日期和時(shí)間組成。例如,有效的日期和時(shí)間數(shù)據(jù)包括“4/01/98 12:15:00:00:00 PM”和“1:28:29:15:01AM 8/17/98”。前一個(gè)數(shù)據(jù)類型是日期在前,時(shí)間在后一個(gè)數(shù)據(jù)類型是霎時(shí)間在前,日期在后。在 Microsoft SQL Server中,日期和時(shí)間數(shù)據(jù)類型包括Datetime 和 Smalldatetime 兩種類型時(shí),所存儲(chǔ)的日期范圍是從 1753 年 1 月 1 日開始,到9999 年12 月 31 日結(jié)束(每一個(gè)值要求 8 個(gè)存儲(chǔ)字節(jié))。使用 Smalldatetime 數(shù)據(jù)類型時(shí),所存儲(chǔ)的日期范圍是 1900年 1 月 1日 開始,到 2079 年 12 月 31 日結(jié)束(每一個(gè)值要求 4 個(gè)存儲(chǔ)字節(jié))。
日期的格式可以設(shè)定。設(shè)置日期格式的命令如下:
Set DateFormat {format | @format _var|
其中,format | @format_var 是日期的順序。有效的參數(shù)包括 MDY、DMY、YMD、YDM、MYD 和 DYM。在默認(rèn)情況下,日期格式為MDY。
例如,當(dāng)執(zhí)行 Set DateFormat YMD 之后,日期的格式為年 月 日 形式;當(dāng)執(zhí)行 Set DateFormat DMY 之后,日期的格式為日 月有年 形式
(5)數(shù)字?jǐn)?shù)據(jù)類型。
數(shù)字?jǐn)?shù)據(jù)只包含數(shù)字。數(shù)字?jǐn)?shù)據(jù)類型包括正數(shù)和負(fù)數(shù)、小數(shù)(浮點(diǎn)數(shù))和整數(shù)。
整數(shù)由正整數(shù)和負(fù)整數(shù)組成,例如 39、25、0-2 和 33967。在 Micrsoft SQL Server 中,整數(shù)存儲(chǔ)的數(shù)據(jù)類型是 ?Int,Smallint和 Tinyint。Int 數(shù)據(jù)類型存儲(chǔ)數(shù)據(jù)的范圍大于 Smallint 數(shù)據(jù)類型存儲(chǔ)數(shù)據(jù)的范圍,而 Smallint 據(jù)類型存儲(chǔ)數(shù)據(jù)的范圍大于Tinyint 數(shù)據(jù)類型存儲(chǔ)數(shù)據(jù)的范圍。使用 Int 數(shù)據(jù)狗昔存儲(chǔ)數(shù)據(jù)的范圍是從 -2 147 483 648 到 2 147 483 647(每一個(gè)值要求4個(gè)字節(jié)存儲(chǔ)空間)。使用 Smallint 數(shù)據(jù)類型時(shí),存儲(chǔ)數(shù)據(jù)的范圍從 -32 768 到 32 767(每一個(gè)值要求2個(gè)字節(jié)存儲(chǔ)空間)。使用Tinyint 數(shù)據(jù)類型時(shí),存儲(chǔ)數(shù)據(jù)的范圍是從0 到255(每一個(gè)值要求1個(gè)字節(jié)存儲(chǔ)空間)。
精確小婁數(shù)據(jù)在 SQL Server 中的數(shù)據(jù)類型是 Decimal 和 Numeric。這種數(shù)據(jù)所占的存儲(chǔ)空間根據(jù)該數(shù)據(jù)的位數(shù)后的位數(shù)來確定。
在SQL Server 中,近似小數(shù)數(shù)據(jù)的數(shù)據(jù)類型是 Float 和 Real。例如,三分之一這個(gè)分?jǐn)?shù)記作。3333333,當(dāng)使用近似數(shù)據(jù)類型時(shí)能準(zhǔn)確表示。因此,從系統(tǒng)中檢索到的數(shù)據(jù)可能與存儲(chǔ)在該列中數(shù)據(jù)不完全一樣。
在這里說明一點(diǎn),舉例說明:
我們聲明一個(gè)變量,賦值并打印出來:
1 declare @t char(10); 2 set @t='hello'; 3 print @t;當(dāng)我們繼續(xù)為@t變量進(jìn)行字符串連接操作時(shí),此時(shí)輸出的@t又是什么了?
1 declare @t char(10); 2 set @t='hello'; 3 print @t; 4 5 set @t=@t+'world'; 6 print @t結(jié)果如圖:
此時(shí)說明了一點(diǎn),固定長(zhǎng)度char類型,長(zhǎng)度是固定的,不足時(shí)候用空格補(bǔ)齊,當(dāng)繼續(xù)向hello后面添加world時(shí)候,由于已經(jīng)達(dá)到最大長(zhǎng)度,所以無法添加上
去。此時(shí)我們看看使用varchar(10)的情況。
1 declare @t varchar(10); 2 set @t='hello'; 3 print @t; 4 5 set @t=@t+'world'; 6 print @t結(jié)果如圖所示:
所以對(duì)比char和varchar,前者是固定長(zhǎng)度類型,后者雖然聲明了字符長(zhǎng)度,但是是可變的。
加入聲明變量后,我們不進(jìn)行復(fù)制的話,那么這個(gè)變量就為null。null與任何字符或者變量做運(yùn)算,其結(jié)果都為null。
為了保證有結(jié)果顯示,在這里我們學(xué)習(xí)一個(gè)字符串表達(dá)式isnull用法。isnull(“變量1”,期望的賦值)。判斷變量如果為null,則此變量賦值為期望的賦值。
上述變量未賦值,所以進(jìn)行字符串連接沒有結(jié)果,此處我們可以這樣處理:
1 declare @t varchar(10); 2 print @t; 3 4 set @t=isnull(@t,'')+'world'; 5 print @t 6結(jié)果為:
?
四.字符串處理函數(shù)
(1)求子串substring。
舉例說明:對(duì)于商品的名稱太長(zhǎng),可能我們需要截取主要的信息來看。
截取product后面一部分,即采用substring(“字符串”,起始位置,截取長(zhǎng)度)。同時(shí)需要注意的是:sql下標(biāo)是從1開始,跟C#里面不一樣。不是從0開始計(jì)數(shù)。
1 select productname,substring( productname,9,10) 2 from production.products結(jié)果如圖所示:
(2)left表示從左邊截取(從左往右數(shù)),right表示從右邊截取(從右往左數(shù))。
1 select productname,left( productname,9) 2 from production.products 1 select productname,right( productname,9) 2 from production.products(3)len返回字符串中的字符數(shù),忽略空格。
1 declare @t char(10); 2 set @t='hello'; 3 print @t; 4 print len(@t); 5 set @t=isnull(@t,'')+'world'; 6 print @t 7 print len(@t)結(jié)果:
從結(jié)果可以看出,len返回的是字符串中的字符個(gè)數(shù)。
(4)datalength,返回字符串的實(shí)際長(zhǎng)度,包括空格。
1 declare @t char(10); 2 set @t='hello'; 3 print @t; 4 print datalength(@t); 5 set @t=isnull(@t,'')+'world'; 6 print @t 7 print datalength(@t)(5)charIndex找出字符串中出現(xiàn)某個(gè)匹配字符的位置.
1 2 select productname,charindex(' ',productname) as N'出現(xiàn)空格位置' 3 from production.products(6)replace替代字符串中某部分內(nèi)容。
1 select productname,replace(productname,'Product','產(chǎn)品名') 2 from production.products結(jié)果如圖所示:
(7)stuff替代字符串中從第n個(gè)字符開始,數(shù)出m個(gè)字符,用什么相應(yīng)字符串替代。
例如:
1 select productname,stuff(productname,8,1,'::::') 2 from production.products(8)大小寫轉(zhuǎn)換。upper大寫,lower小寫。
1 select productname,upper(productname),lower(productname) 2 from production.products(9)去除空格rtrim,從右邊去除空格,ltrim從左邊去除空格。
1 declare @s char(10); 2 set @s='hello'; 3 select datalength(rtrim(@s));由于sql不存在trim,所以要去除字符串中全部空格在采用:
select ltrim(rtrim(@s));
?
希望各位大牛給出指導(dǎo),不當(dāng)之處虛心接受學(xué)習(xí)!謝謝!
轉(zhuǎn)載于:https://www.cnblogs.com/Mining-LiTeng/p/4566686.html
總結(jié)
以上是生活随笔為你收集整理的SQLServer学习笔记系列2的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 两种富文本编辑器-ckeditor和ue
- 下一篇: 开博拉~~~庆祝一下,哈~~~