日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

3.《SQLSERVER2012之T-SQL教程》T-SQL单表查询(三)

發布時間:2024/9/21 数据库 22 豆豆
生活随笔 收集整理的這篇文章主要介紹了 3.《SQLSERVER2012之T-SQL教程》T-SQL单表查询(三) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

2019獨角獸企業重金招聘Python工程師標準>>>

表結構與數據:https://github.com/XuePeng87/TSQLV4

使用字符數據

??? 設計字符數據的查詢操作,包括數據類型、排序規則、運算符和函數,以及模式匹配。

數據類型

??? SQL Server支持兩種字符數據類型,即常規和Unicode。常規數據類型包括CHAR和VARCHAR,Unicode數據類型包括NCHAR和NVARCHAR。常規字符的每個字符使用1個字節存儲,而Unicode數據的每個字符要求2個字節,并且需要一個代理項對時,要求4個字節。如果為列選擇了常規字符類型,會被限制除英語之外僅能使用一種語言。列支持的語言取決于列的有效規則。使用Unicode數據類型可以支持多種語言,所以如果你需要存儲多種語言的字符數據,請確保使用Unicode字符類型,而不是常規字符類型。

??? 名稱中沒有VAR元素的任何數據類型(CHAR、NCHAR)具有固定長度,即SQL Server按照列定義的大小保留行空間,而不是按照字符串中的實際字符數保留空間。

??? 名稱中含有VAR元素的數據類型(VARCHAR、NVARCHAR)具有可變長度,即SQL Server根據存儲需要,在行中使用盡可能多的存儲空間存儲字符串中的字符,外加兩個額外的字節偏移數據。

??? 可變長度數據類型的數據更新效率低于固定長度數據類型。

??? 還可以使用MAX來定義可變長度數據類型,而不是使用最大字符數。MAX默認是8000個字節,超過這個數值的任何值會作為大型對象(LOB)存儲在行的外部。

排序規則

??? 排序規則是一個字符數據屬性,包括語言支持、排序順序、區分大小寫和區分重音等。可以查詢表函數fn_helpcollations查看支持的排序規則及其說明的結果集。

SELECT name, description FROM sys.fn_helpcollations();

??? 例如,對排序規則Latin1_General_CI_AS的說明:

  • Latin1_General:支持英語和德語字符,以及大多數西歐國家使用的字符;
  • CI數據不區分大小寫(a=A);
  • AS數據區分重音(à<>ā);

??? 在企業內部部署SQL Server實施中,排序規則可以定義在4個不同層級:實例、數據庫、列和表達式,SQL Server將使用最低有效級別的排序規則。

??? 實例的排序規則是安裝程序選擇的一部分,它確定所有系統數據庫的排序規則,并作為用戶數據庫的默認規則。數據庫的排序規則決定了數據庫對象元數據的排序規則,并默認應用與用戶列表。可以在列定義中使用COLLATE子句顯示地指定列的排序規則,否則默認使用數據庫的排序規則。例如:

SELECT empid, firstname, lastname FROM HR.Employees WHERE lastname = N'davis';

??? 將返回lastname=Davis的行,盡管大小寫不匹配,但是不區分大小寫是有效的書寫形式,如果希望篩選區分大小寫,那么可以按下面的轉換表達式排序規則進行查詢:

SELECT empid, firstname, lastname FROM HR.Employees WHERE lastname COLLATE Latin1_General_CS_AS = N'Davis';

運算符和函數

1.字符串連接

????T-SQL提供了+和CONCAT函數(SQL Server2012提供)連接字符串,例如:

SELECT empid, firstname + N' ' + lastname AS fullname FROM HR.Employees;SELECT custid, country, region, city, country + N',' + region + N',' + city AS location FROM Sales.Customers;SELECT custid, country, region, city, CONCAT(country, N',' + region, N',' + city) AS location FROM Sales.Customers;

??? 標準SQL規定了連接NULL的結果應為NULL。而CONCAT函數則會將NULL替換成空字符串。

2.SUBSTRING函數

??? 次函數對于輸入的string字符串,從start位置開始,提取length個字符。例如,下面的代碼返回"abc":

SELECT SUBSTRING('abcdefg', 1, 3);

??? 如果第三個參數超出了輸入的字符串的末尾,并不會引發錯誤,函數將返回一直到末尾的所有字符。

3.LEFT和RIGHT函數

??? LEFT和RIGHT函數是SUBSTRING函數的簡化形式,可以從輸入字符串的左邊或右邊返回制定數量的字符串,例如,下面的代碼返回"ced":

SELECT RIGHT('abced', 3);

4.LEN和DATALENGTH函數

??? LEN函數返回輸入字符串中字符的數量,并且會刪除尾隨的空格,下面代碼返回5:

SELECT LEN(N'abcde')

??? DATALENGTH函數返回輸入字符串存儲的字節數,不刪除尾隨的空格,下面代碼返回10:

SELECT DATALENGTH(N'abcde')

5.CHARINDEX函數

??? CHARINDEX函數返回子字符串在字符串中第一次出現的位置,例如,下面代碼返回6:

SELECT CHARINDEX(' ','Itzik Ben-Gan');

6.PATINDEX函數

??? 返回模式在字符串中第一次出現的位置,例如下面的代碼返回5:

SELECT PATINDEX('%[0-9]%','abcd123efgh');

7.REPLACE函數

??? REPLACE(string,substring1,substring2)函數,使用substring2替換string中出現的所有substring1,例如,下面將'1-a 2-b'中的'-'替換成':':

SELECT REPLACE('1-a 2-b', '-', ':')

8.REPLICATE函數

??? 可以按照指定的次數重復一個字符串,例如下面的代碼將返回'abcabcabc':

SELECT REPLICATE('abc', 3)

9.STUFF函數

????允許從字符串中逸出指定數量的字符,并插入一個替代的新子字符串。例如將'xyz'中的'y'替換成'abc':

SELECT STUFF('xyz', 2, 1, 'abc')

10.UPPER和LOWER函數

??? 將字符串全部轉大寫或轉小寫。

11.RTRIM和LTRIM喊出

??? 刪除尾隨的或者前端的空格。

12.FORMAT函數

??? 允許按照Microsoft.NET格式字符串和一個可選的區域參數,將輸入值格式化成另一個字符串,例如將1759前面加上6個0:

SELECT FORMAT(1759, '0000000000')

13.LIKE謂詞

??? 1.(%)百分號通配符:代表一個任意大小的字符串,包括空字符串;

??? 2.(_)下劃線通配符:代表單個字符;

??? 3.([<List of Characters>])字符列表通配符:方括號內帶有字符列表的意思是,代表單個字符必須是列表中的指定字符之一,例如下面的查詢返回姓氏的第一個字符是A、B或C的雇員:

SELECT empid, lastname FROM HR.Employees WHERE lastname LIKE N'[ABC]%';

??? 4.([<Character>]-<Character>)字符范圍通配符:代表單個字符必須在指定的范圍內,例如,下面的查詢返回姓氏的第一個字符位于字母A~E范圍內的雇員:

SELECT empid, lastname FROM HR.Employees WHERE lastname LIKE N'[A-E]%';

??? 5.([^<Character List or Range>])未指定范圍通配符:代表單個字符沒有在指定的字符列表或范圍內,例如,下面的查詢將返回姓氏第一個字符不是A~E范圍內的雇員:

SELECT empid, lastname FROM HR.Employees WHERE lastname LIKE N'[^A-E]%';

??? 6.ESCAPE字符

??? 如果想要搜索已用作通配符的字符(如"%"、"_"、"["或]""),需要使用一個轉義字符。例如,要檢查col1列中是否包含下劃線,可以用 col1 LIKE '%!_%' ESCAPE '!'。

轉載于:https://my.oschina.net/u/2981366/blog/775513

總結

以上是生活随笔為你收集整理的3.《SQLSERVER2012之T-SQL教程》T-SQL单表查询(三)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。