SQLServer學習筆記<>sql的範圍內尋找,sql資料類型,字串處理函數

來源:互聯網
上載者:User

標籤:

sql的範圍內尋找

(1)between.....and用法

通常情況下我們尋找一個在某固定地區內的所有記錄,可以採用>=,<=來寫sql語句,例如:尋找訂單價格在1000到2000之間的所有記錄,可以這樣寫:

1 select * from sales.ordervalues2 where val>=1000 and val<=2000

查詢結果:

此處的sales.ordervalues來自於定義的視圖,關於視圖後續會講到。

如果採用between.....and.....則可以同樣達到效果。

1 select * from sales.ordervalues2 where val between 1000 and 2000

注意一點:between....and.....是包含邊界的,即此處包含1000和2000這個邊界值。

(2)in 用法

假如要尋找1號顧客,2號顧客,9號顧客訂單資訊,一般情況下,我們會這樣寫:

1 select * from sales.ordervalues2 where custid=1 or custid=2 or custid=9

結果為:

採用in,則減少了寫法的繁雜,可以這樣如下寫法也能達到要求。

1 select * from sales.ordervalues2 where custid in(1,2,9)

(3)like用法,用來匹配字元或字串。

假如要尋找僱員表Hr.employees裡面lastname裡包含a的字元。可以這樣寫:

1  select * from Hr.employees2  where lastname like ‘%a%‘

顯示結果為:

其中%表示萬用字元,即可以為任一字元。

sql資料類型

sql包含多種資料類型,滿足多種開發需求。常見的資料類型包括:

(1)位元據類型。

位元據包括 Binary、Varbinary 和 Image。
  Binary 資料類型既可以是固定長度的(Binary),也可以是變長度的。
  Binary[(n)] 是 n 位固定的位元據。其中,n 的取值範圍是從 1 到 8000。其儲存窨的大小是 n + 4 個位元組。
  Varbinary[(n)] 是 n 位變長度的位元據。其中,n 的取值範圍是從 1 到 8000。其儲存窨的大小是 n + 4個位元組,不是n 個位元組。
  在 Image 資料類型中儲存的資料是以位字串儲存的,不是由 SQL Server 解釋的,必須由應用程式來解釋。例如,應用程式可以使用BMP、TIEF、GIF 和 JPEG 格式把資料存放區在 Image 資料類型中。

(2)字元資料類型。

字元資料的類型包括 Char,Varchar 和 Text。
  字元資料是由任何字母、符號和數字任意組合而成的資料。
  Varchar 是變長字元資料,其長度不超過 8KB。Char 是定長字元資料,其長度最多為 8KB。超過 8KB 的ASCII 資料可以使用Text資料類型儲存。例如,因為 Html 文檔全部都是 ASCII 字元,並且在一般情況下長度超過 8KB,所以這些文檔可以 Text 資料類型儲存在SQL Server 中。

(3)Unicode資料類型

Unicode 資料類型包括 Nchar,Nvarchar 和Ntext。
  在 Microsoft SQL Server 中,傳統的非 Unicode 資料類型允許使用由特定字元集定義的字元。在 SQL Server安裝過程中,允許選擇一種字元集。使
用 Unicode 資料類型,列中可以儲存任何由Unicode 標準定義的字元。在 Unicode 標準中,包括了以各種字元集定義的全部字元。使用Unicode資料類型,所戰勝的窨是使用非 Unicode 資料類型所佔用的窨大小的兩倍。 

  在 SQL Server 中,Unicode 資料以 Nchar、Nvarchar 和 Ntext 資料類型儲存。使用這種字元類型儲存的列可以儲存多個字元集中的字元。當列的長度變化時,應該使用Nvarchar 字元類型,這時最多可以儲存 4000 個字元。當列的長度固定不變時,應該使用 Nchar 字元類型,同樣,這時最多可以儲存4000 個字元。當使用 Ntext 資料類型時,該列可以儲存多於 4000 個字元。

(4)日期和時間資料類型。

日期和時間資料類型包括 Datetime 和 Smalldatetime兩種類型。

日期和時間資料類型由有效日期和時間組成。例如,有效日期和時間資料包括“4/01/98 12:15:00:00:00 PM”和“1:28:29:15:01AM 8/17/98”。前一個資料類型是日期在前,時間在後一個資料類型是霎時間在前,日期在後。在 Microsoft SQL Server中,日期和時間資料類型包括Datetime 和 Smalldatetime 兩種類型時,所儲存的日期範圍是從 1753 年 1 月 1 日開始,到9999 年12 月 31 日結束(每一個值要求 8 個儲存位元組)。使用 Smalldatetime 資料類型時,所儲存的日期範圍是 1900年 1 月 1日 開始,到 2079 年 12 月 31 日結束(每一個值要求 4 個儲存位元組)。
  日期的格式可以設定。設定日期格式的命令如下:
  Set DateFormat {format | @format _var|
  其中,format | @format_var 是日期的順序。有效參數包括 MDY、DMY、YMD、YDM、MYD 和 DYM。在預設情況下,日期格式為MDY。
  例如,當執行 Set DateFormat YMD 之後,日期的格式為年 月 日 形式;當執行 Set DateFormat DMY 之後,日期的格式為日 月有年 形式

(5)數字資料類型。

數字資料只包含數字。數字資料類型包括正數和負數、小數(浮點數)和整數。
  整數由正整數和負整數組成,例如 39、25、0-2 和 33967。在 Micrsoft SQL Server 中,整數儲存的資料類型是    Int,Smallint和 Tinyint。Int 資料類型儲存資料的範圍大於 Smallint 資料類型儲存資料的範圍,而 Smallint 據類型儲存資料的範圍大於Tinyint 資料類型儲存資料的範圍。使用 Int 資料狗昔儲存資料的範圍是從 -2 147 483 648 到 2 147 483 647(每一個值要求4個位元組儲存空間)。使用 Smallint 資料類型時,儲存資料的範圍從 -32 768 到 32 767(每一個值要求2個位元組儲存空間)。使用Tinyint 資料類型時,儲存資料的範圍是從0 到255(每一個值要求1個位元組儲存空間)。
  精確小婁資料在 SQL Server 中的資料類型是 Decimal 和 Numeric。這種資料所佔的儲存空間根據該資料的位元後的位元來確定。
  在SQL Server 中,近似小數資料的資料類型是 Float 和 Real。例如,三分之一這個分數記作。3333333,當使用近似資料類型時能準確表示。因此,從系統中檢索到的資料可能與儲存在該列中資料不完全一樣。

在這裡說明一點,舉例說明:

我們聲明一個變數,賦值並列印出來:

1  declare @t char(10);2  set @t=‘hello‘;3  print @t;

當我們繼續為@t變數進行字串串連操作時,此時輸出的@t又是什麼了?

1  declare @t char(10);2  set @t=‘hello‘;3  print @t;4  5  set @[email protected]+‘world‘;6  print @t

結果

此時說明了一點,固定長度char類型,長度是固定的,不足時候用空格補齊,當繼續向hello後面添加world時候,由於已經達到最大長度,所以無法添加上

去。此時我們看看使用varchar(10)的情況。

1  declare @t varchar(10);2  set @t=‘hello‘;3  print @t;4  5  set @[email protected]+‘world‘;6  print @t

結果:

所以對比char和varchar,前者是固定長度類型,後者雖然聲明了字元長度,但是是可變的。

加入聲明變數後,我們不進行複製的話,那麼這個變數就為null。null與任何字元或者變數做運算,其結果都為null。

為了保證有結果顯示,在這裡我們學習一個字串運算式isnull用法。isnull(“變數1”,期望的賦值)。判斷變數如果為null,則此變數賦值為期望的賦值。

上述變數未賦值,所以進行字串串連沒有結果,此處我們可以這樣處理:

1  declare @t varchar(10);2  print @t;3  4  set @t=isnull(@t,‘‘)+‘world‘;5  print @t6  

結果為:

 

字串處理函數

(1)求子串substring。

舉例說明:對於商品的名稱太長,可能我們需要截取主要的資訊來看。

截取product後面一部分,即採用substring(“字串”,起始位置,截取長度)。同時需要注意的是:sql下標是從1開始,跟C#裡面不一樣。不是從0開始計數。

1  select productname,substring( productname,9,10)2   from production.products

結果:

(2)left表示從左邊截取(從左往右數),right表示從右邊截取(從右往左數)。

1  select productname,left( productname,9)2   from production.products

1  select productname,right( productname,9)2   from production.products

(3)len返回字串中的字元數,忽略空格。

1  declare @t char(10);2  set @t=‘hello‘;3  print @t;4  print len(@t);5  set @t=isnull(@t,‘‘)+‘world‘;6  print @t7  print len(@t)

結果:

從結果可以看出,len返回的是字串中的字元個數。

(4)datalength,返回字串的實際長度,包括空格。

1  declare @t char(10);2  set @t=‘hello‘;3  print @t;4  print datalength(@t);5  set @t=isnull(@t,‘‘)+‘world‘;6  print @t7  print datalength(@t)

(5)charIndex找出字串中出現某個匹配字元的位置.

1  2  select productname,charindex(‘ ‘,productname) as N‘出現空格位置‘3  from production.products

(6)replace替代字串中某部分內容。

1  select productname,replace(productname,‘Product‘,‘產品名‘)2  from production.products

結果:

(7)stuff替代字串中從第n個字元開始,數出m個字元,用什麼相應字串替代。

例如:

1  select productname,stuff(productname,8,1,‘::::‘)2  from production.products

(8)大小寫轉換。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));

SQLServer學習筆記<>sql的範圍內尋找,sql資料類型,字串處理函數

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.