SqlSever 簡易使用手冊

前言

 所有ExampleSQL2000的查詢分析器(Microsoft SQL Server/80/Tools/Binn/isqlw.exe)執行通過。(*以下Example 簡記爲EX)

* append file 分支包括函數類型列表,數據類型列表。

Create 2004/12/02 14:11:23

一、 基本DML 

基本DML增加數據(insert)、更改數據(update) 、刪除數據(delete) 、查詢數據(query)四種模式:  

1.增加數據:

·    INSERT INTO table_name (column1,column2,...) VALUES 二、 複雜查詢

 1.組合查詢:

 組合查詢是指所查詢得數據來源並不只有單一的表格,而是聯合一個以上的表格才能夠得到結果的。

  SELECT  *

  FROM table1,table2

  WHERE table1.colum1=table2.column1

  說明:

   1.查詢兩個表格中其中 column1 值相同的數據

   2.當然兩個表格相互比較的列,其數據形態必須相同

   3.一個複雜的查詢其用到的表格可能會很多個

EX)

SELECT  * FROM  employees a , employeeterritories b WHERE a.employeeid=b.employeeid

SELECT distinct lastname FROM  employees a , employeeterritories b WHERE a.employeeid=b.employeeid (沒發現有distinctrow???)

 2.整合性的查詢:

 ·     條數記數

  SELECT  COUNT (*)

  FROM table_name

  WHERE column_name = xxx

  說明:

  查詢符合條件的數據條數

 

EX)

SELECT count(*) FROM  employees

 ·   含有聚合函數:

 SQL查詢分析器中打開對象瀏覽器可看到函數列表

以下是常用的聚合函數

  SELECT  SUM(column1)

  FROM table_name

  說明:

   1.計算出總和,所選的列必須是可數的數字形態

   2.除此以外還有 AVG() 是計算平均、MAX()MIN()

   計算最大最小值的整合性查詢

  

SELECT  column1,AVG(column2)

FROM table_name

GROUP BY column1

HAVING AVG(column2) > xxx

說明:

EX)

SELECT sum(unitprice) FROM  [order details] *** 表名分開的情況

GROUP BY: column1 爲一組計算 column2 的平均值必須和 AVGSUM 等整合性查詢的關鍵字一起使用    

SELECT ProductID ,avg(unitprice) FROM  [order details] group by ProductID

 

HAVING : HAVING 子句通常與 GROUP BY 子句結合使用一起使用作爲整合性的限制

例如,下列 WHERE 子句僅限定以高於 $100 的單價銷售產品的訂單,而 HAVING 子句進一步將結果限制爲只包括 100 件以上的訂單:

 

SELECT  OrdD1.OrderID AS OrderID,

       SUM(OrdD1.Quantity) AS "Units Sold",

       SUM(OrdD1.UnitPrice * OrdD1.Quantity) AS Revenue

FROM [Order Details] AS OrdD1

WHERE OrdD1.OrderID in (SELECT  DISTINCT OrdD2.OrderID

                        FROM [Order Details] AS OrdD2

                        WHERE OrdD2.UnitPrice > $100)

GROUP BY OrdD1.OrderID

HAVING SUM(OrdD1.Quantity) > 100 

3.複合性的查詢  

  SELECT  *

   FROM table_name1

   WHERE EXISTS ( SELECT  * FROM table_name2 WHERE conditions )

   說明:

   WHERE conditions 可以是另外一個的 query

   1.EXISTS 在此是指存在與否

  SELECT  *

   FROM table_name1

   WHERE column1 IN ( SELECT  column1 FROM table_name2 WHERE conditions )

   說明 

   IN 後面接的是一個集合,表示column1 存在集合裏面SELECT  出來的數據形態必須符合 column1

EX)

SELECT  OrdD1.OrderID AS OrderID,

       SUM(OrdD1.Quantity) AS "Units Sold",

       SUM(OrdD1.UnitPrice * OrdD1.Quantity) AS Revenue

FROM [Order Details] AS OrdD1

WHERE  not exists (SELECT  DISTINCT OrdD2.OrderID

                        FROM [Order Details] AS OrdD2

                        WHERE OrdD2.UnitPrice > $100)

GROUP BY OrdD1.OrderID

HAVING SUM(OrdD1.Quantity) > 100

4.其他查詢 (like,between,top n)

   SELECT  *

   FROM table_name1 WHERE column1 LIKE 'x%'

   說明:

   1.LIKE 必須和後面的'x%' 相呼應表示以 x爲開頭的字串

  

    SELECT  * FROM table_name1 WHERE column1 BETWEEN xx AND yy

   說明 

   1. BETWEEN 表示 column1 的值介於 xx yy 之間

 ·    關於like

通配符 描述 示例

% 包含零個或更多字符的任意字符串。 WHERE title LIKE '%computer%' 將查找處於書名任意位置的包含單詞 computer 的所有書名。

_(下劃線) 任何單個字符。 WHERE au_fname LIKE '_ean' 將查找以 ean 結尾的所有 4 個字母的名字(DeanSean 等)。

[ ] 指定範圍 ([a-f]) 或集合 ([abcdef]) 中的任何單個字符。 WHERE au_lname LIKE '[C-P]arsen' 將查找以arsen 結尾且以介於 C P 之間的任何單個字符開始的作者姓氏,例如,CarsenLarsenKarsen 等。

[^] 不屬於指定範圍 ([a-f]) 或集合 ([abcdef]) 的任何單個字符。 WHERE au_lname LIKE 'de[^l]%' 將查找以 de 開始且其後的字母不爲 l 的所有作者的姓氏。

 

SELECT  CompanyName, ContactName, Phone, Fax

FROM Customers

WHERE CompanyName LIKE N'%snabbk?p'+'%'

ORDER BY CompanyName ASC, ContactName ASC; ===>***N的作用???

 ·    關於between 

SELECT  title_id, ytd_sales

FROM titles

WHERE ytd_sales NOT BETWEEN 4095 AND 12000

 ·    關於TOP N

SELECT TOP 5 orderid,productid,quantity from [order details] order by quantity desc ( value1,value2, ...)

說明:

 1.若沒有指定column 系統則會按表格內的列順序填入數據

  2.列的數據形態和所填入的數據必須吻合

 3.table_name 也可以是景觀 view_name

 ·    INSERT INTO table_name (column1,column2,...) SELECT columnx,columny,... FROM another_table

說明:也可以經過一個子查詢(subquery)把別的表格的數據填入

EX)

INSERT Orders

(OrderDate,RequiredDate,Freight,ShipName)

VALUES

(CONVERT(DateTime,'2004/12/02 1:1:1'),Null,99,'GEC')

*該語句包含了日期,數字,字符,和空值的輸入。其中日期類型爲隱性轉換 如果比較 char datetime 表達式 SQL Server 可將它們自動轉換。

 OrderDate==='2004/12/02 1:1:1'

2.更改數據:

·    UPDATE table_name SET column1=value1, column2=value2  ... ... WHERE conditoins

說明:

 1.更改某個列設定其值爲'xxx'

 2.conditions 是所要符合的條件、若沒有 WHERE 則 整個 table 的那個列都會全部被更改

EX)

UPDATE orders

SET orderdate='2004-1-1 1:1:1' ,freight= 99,shipname='Gecheng'

WHERE orderid=10248 

3.刪除數據:

·    DELETE FROM table_name WHERE conditions

說明:刪除符合條件的數據

EX)

DELETE [Order Details]

FROM Suppliers, Products

WHERE Products.SupplierID = Suppliers.SupplierID

  AND Suppliers.CompanyName = 'Lyngbysild'

  AND [Order Details].ProductID = Products.ProductID

* [order details] 是一個空格分開的表名

 

4.查詢數據:

 基本查詢

·    SELECT column1,columns2,... FROM table_name

  說明:把table_name 的特定列數據全部列出來

   SELECT *

   FROM table_name

   WHERE column1 = xxx

   [AND column2 > yyy] [OR column3 <> zzz]

   說明:

   1.'*'表示全部的列都列出來

   2.WHERE 之後是接條件式,把符合條件的數據列出來

   SELECT column1,column2

   FROM table_name

   ORDER BY column2 [DESC]

   說明:

   ORDER BY 是指定以某個列做排序,[DESC]是指從大到小排列,若 沒有指明[ASC],則是從小到大排列

 

EX)

SELECT * FROM employees WHERE employeeid>3 OR employeeid=1 ORDER BY employeeid ASC;

 

組合查詢 , 整合性的查詢 , 含有聚合函數 , 複合性的查詢 , 其他查詢(like,between.... ...) 後續 

二、複雜查詢

 1.組合查詢:

組合查詢是指所查詢得數據來源並不只有單一的表格,而是聯合一個以上的表格才能夠得到結果的。

  SELECT  *

  FROM table1,table2

  WHERE table1.colum1=table2.column1

  說明:

   1.查詢兩個表格中其中 column1 值相同的數據

   2.當然兩個表格相互比較的列,其數據形態必須相同

   3.一個複雜的查詢其用到的表格可能會很多個

EX)

SELECT  * FROM  employees a , employeeterritories b WHERE a.employeeid=b.employeeid

SELECT distinct lastname FROM  employees a , employeeterritories b WHERE a.employeeid=b.employeeid

(沒發現有distinctrow???

2.整合性的查詢:  

·     條數記數

  SELECT  COUNT (*)

  FROM table_name

  WHERE column_name = xxx

  說明:

  查詢符合條件的數據條數  

EX)

SELECT count(*) FROM  employees 

·   含有聚合函數: 

SQL查詢分析器中打開對象瀏覽器可看到函數列表

以下是常用的聚合函數

  SELECT  SUM(column1)

  FROM table_name

  說明:

   1.計算出總和,所選的列必須是可數的數字形態

   2.除此以外還有 AVG() 是計算平均、MAX()MIN()

   計算最大最小值的整合性查詢   

SELECT  column1,AVG(column2)

FROM table_name

GROUP BY column1

HAVING AVG(column2) > xxx

說明:   

EX)

SELECT sum(unitprice) FROM  [order details] *** 表名分開的情況 

GROUP BY: column1 爲一組計算 column2 的平均值必須和 AVGSUM 等整合性查詢的關鍵字一起使用    

SELECT ProductID ,avg(unitprice) FROM  [order details] group by ProductID

HAVING : HAVING 子句通常與 GROUP BY 子句結合使用一起使用作爲整合性的限制

例如,下列 WHERE 子句僅限定以高於 $100 的單價銷售產品的訂單,而 HAVING 子句進一步將結果限制爲只包括 100 件以上的訂單:

SELECT  OrdD1.OrderID AS OrderID,

       SUM(OrdD1.Quantity) AS "Units Sold",

       SUM(OrdD1.UnitPrice * OrdD1.Quantity) AS Revenue

FROM [Order Details] AS OrdD1

WHERE OrdD1.OrderID in (SELECT  DISTINCT OrdD2.OrderID

                        FROM [Order Details] AS OrdD2

                        WHERE OrdD2.UnitPrice > $100)

GROUP BY OrdD1.OrderID

HAVING SUM(OrdD1.Quantity) > 100 

3.複合性的查詢  

  SELECT  *

   FROM table_name1

   WHERE EXISTS ( SELECT  * FROM table_name2 WHERE conditions )

   說明:

   WHERE conditions 可以是另外一個的 query

   1.EXISTS 在此是指存在與否

   SELECT  *

   FROM table_name1

   WHERE column1 IN ( SELECT  column1 FROM table_name2 WHERE conditions )

   說明 

   IN 後面接的是一個集合,表示column1 存在集合裏面SELECT  出來的數據形態必須符合 column1

EX)

SELECT  OrdD1.OrderID AS OrderID,

       SUM(OrdD1.Quantity) AS "Units Sold",

       SUM(OrdD1.UnitPrice * OrdD1.Quantity) AS Revenue

FROM [Order Details] AS OrdD1

WHERE  not exists (SELECT  DISTINCT OrdD2.OrderID

                        FROM [Order Details] AS OrdD2

                        WHERE OrdD2.UnitPrice > $100)

GROUP BY OrdD1.OrderID

HAVING SUM(OrdD1.Quantity) > 100 

4.其他查詢 (like,between,top n) 

  SELECT  *

   FROM table_name1 WHERE column1 LIKE 'x%'

   說明:

   1.LIKE 必須和後面的'x%' 相呼應表示以 x爲開頭的字串

  

    SELECT  * FROM table_name1 WHERE column1 BETWEEN xx AND yy

   說明 

   1. BETWEEN 表示 column1 的值介於 xx yy 之間  

·    關於like

通配符 描述 示例

% 包含零個或更多字符的任意字符串。 WHERE title LIKE '%computer%' 將查找處於書名任意位置的包含單詞 computer 的所有書名。

_(下劃線) 任何單個字符。 WHERE au_fname LIKE '_ean' 將查找以 ean 結尾的所有 4 個字母的名字(DeanSean 等)。

[ ] 指定範圍 ([a-f]) 或集合 ([abcdef]) 中的任何單個字符。 WHERE au_lname LIKE '[C-P]arsen' 將查找以arsen 結尾且以介於 C P 之間的任何單個字符開始的作者姓氏,例如,CarsenLarsenKarsen 等。

[^] 不屬於指定範圍 ([a-f]) 或集合 ([abcdef]) 的任何單個字符。 WHERE au_lname LIKE 'de[^l]%' 將查找以 de 開始且其後的字母不爲 l 的所有作者的姓氏。

 

SELECT  CompanyName, ContactName, Phone, Fax

FROM Customers

WHERE CompanyName LIKE N'%snabbk?p'+'%'

ORDER BY CompanyName ASC, ContactName ASC; ===>***N的作用??? 

·    關於between 

SELECT  title_id, ytd_sales

FROM titles

WHERE ytd_sales NOT BETWEEN 4095 AND 12000 

·    關於TOP N

SELECT TOP 5 orderid,productid,quantity from [order details] order by quantity desc

三、外聯接的使用 

僅當至少有一個同屬於兩表的行符合聯接條件時,內聯接才返回行。內聯接消除與另一個表中的任何行不匹配的行。

而外聯接會返回 FROM 子句中提到的至少一個表或視圖的所有行,只要這些行符合任何 WHERE HAVING 搜索條件。將檢索通過左向外聯接引用的左表的所有行,以及通過右向外聯接引用的右表的所有行。完整外部聯接中兩個表的所有行都將返回。

Microsoft SQL Server 2000 對在 FROM 子句中指定的外聯接使用以下 SQL-92 關鍵字:

LEFT OUTER JOIN LEFT JOIN

RIGHT OUTER JOIN RIGHT JOIN

FULL OUTER JOIN FULL JOIN

SQL Server 支持 SQL-92 外聯接語法,以及在 WHERE 子句中使用 *= =* 運算符指定外聯接的舊式語法。由於 SQL-92 語法不容易產生歧義,而舊式 Transact-SQL 外聯接有時會產生歧義,因此建議使用 SQL-92 語法。 

·   使用左向外聯接

假設在 city 列上聯接 authors 表和 publishers 表。結果只顯示在出版商所在城市居住的作者(本例中爲 Abraham Bennet Cheryl Carson)。

若要在結果中包括所有的作者,而不管出版商是否住在同一個城市,請使用 SQL-92 左向外聯接。下面是 Transact-SQL 左向外聯接的查詢和結果:

SELECT a.au_fname, a.au_lname, p.pub_name

FROM authors a LEFT OUTER JOIN publishers p

   ON a.city = p.city

ORDER BY p.pub_name ASC, a.au_lname ASC, a.au_fname ASC 

不管是否與 publishers 表中的 city 列匹配,LEFT OUTER JOIN 均會在結果中包含 authors 表的所有行。注意:結果中所列的大多數作者都沒有相匹配的數據,因此,這些行的 pub_name 列包含空值。 

·   使用右向外聯接

假設在 city 列上聯接 authors 表和 publishers 表。結果只顯示在出版商所在城市居住的作者(本例中爲 Abraham Bennet Cheryl Carson)。SQL-92 右向外聯接運算符 RIGHT OUTER JOIN 指明:不管第一個表中是否有匹配的數據,結果將包含第二個表中的所有行。

若要在結果中包括所有的出版商,而不管城市中是否還有出版商居住,請使用 SQL-92 右向外聯接。下面是 Transact-SQL 右向外聯接的查詢和結果:

SELECT a.au_fname, a.au_lname, p.pub_name

FROM authors AS a RIGHT OUTER JOIN publishers AS p

   ON a.city = p.city

ORDER BY p.pub_name ASC, a.au_lname ASC, a.au_fname ASC 

·   使用完整外部聯接

若要通過在聯接結果中包括不匹配的行保留不匹配信息,請使用完整外部聯接。Microsoft? SQL Server? 2000 提供完整外部聯接運算符 FULL OUTER JOIN,不管另一個表是否有匹配的值,此運算符都包括兩個表中的所有行。

 

假設在 city 列上聯接 authors 表和 publishers 表。結果只顯示在出版商所在城市居住的作者(本例中爲 Abraham Bennet Cheryl Carson)。SQL-92 FULL OUTER JOIN 運算符指明:不管表中是否有匹配的數據,結果將包括兩個表中的所有行。

 

若要在結果中包括所有作者和出版商,而不管城市中是否有出版商或者出版商是否住在同一個城市,請使用完整外部聯接。下面是 Transact-SQL 完整外部聯接的查詢和結果:

 

SELECT a.au_fname, a.au_lname, p.pub_name

FROM authors a FULL OUTER JOIN publishers p

   ON a.city = p.city

ORDER BY p.pub_name ASC, a.au_lname ASC, a.au_fname ASC  

四、字符串函數 

這些標量函數對字符串輸入值執行操作,返回字符串或數字值。

 

ASCII

返回字符表達式最左端字符的 ASCII 代碼值。

 

NCHAR

根據 Unicode 標準所進行的定義,用給定整數代碼返回 Unicode 字符。

 

REPLACE

用第三個表達式替換第一個字符串表達式中出現的所有第二個給定字符串表達式。

語法

REPLACE ( 'string_expression1' , 'string_expression2' , 'string_expression3' )

 

STR

由數字數據轉換到字符數據。 

返回字符串中從左,右邊開始指定個數的字符。

 

LEFT RIGHT

LEFT ( character_expression , integer_expression )

 

SPACE

返回由重複的空格組成的字符串。

語法

SPACE ( integer_expression )

 

REPLICATE

以指定的次數重複字符表達式。

語法

REPLICATE ( character_expression , integer_expression )

*若要在 Unicode 數據中包括空格,請使用 REPLICATE 而非 SPACE

 

SUBSTRING

返回字符、binarytext image 表達式的一部分。有關可與該函數一起使用的有效 Microsoft® SQL Server數據類型的更多信息,請參見數據類型。

語法

SUBSTRING ( expression , start , length )

 

LEN

返回給定字符串表達式的字符(而不是字節)個數,其中不包含尾隨空格。

語法

LEN ( string_expression )    

返回將大寫小寫字符數據轉換的字符表達式。

 

LOWER UPPER  

去空格後返回一個字符串

 

LTRIM RTRIM  

 

... ...

 

五、日期和時間函數

 

函數        確定性

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

DATEADD 具有確定性

DATEADD ( datepart , number, date )

 

SELECT DATEADD(day, 21, pubdate) AS timeframe

FROM titles

 

datepart 是規定應向日期的哪一部分返回新值的參數。下表列出了 Microsoft? SQL Server? 識別的日期部分和縮寫。

日期部分 縮寫

Year yy, yyyy

quarter qq, q

Month mm, m

dayofyear dy, y

Day dd, d

Week wk, ww

Hour hh

minute mi, n

second ss, s

millisecond ms

 

DATEDIFF 具有確定性

返回跨兩個指定日期的日期和時間邊界數。

DATEDIFF ( datepart , startdate , enddate )

 

DATENAME 不具有確定性

返回代表指定日期的指定日期部分的字符串。

DATENAME ( datepart , date )

 

DATEPART 除了用作 DATEPART (dw, date) 外都具有確定性。dw 是工作日的日期部分,取決於由設置每週第一天的 SET DATEFIRST 所設置的值。

SET DATEFIRST 7

SELECT DATEPART(weekday,GETDATE()) AS 'WORD DAY'

 

DAY 具有確定性

MONTH 具有確定性

YEAR 具有確定性

 

GETDATE 不具有確定性

datetime 值的 Microsoft? SQL Server? 標準內部格式返回當前系統日期和時間。

SELECT GETDATE()

2004-12-02 00:31:30.840

 

GETUTCDATE 不具有確定性

返回表示當前 UTC 時間(世界時間座標或格林尼治標準時間)的 datetime 值。當前的 UTC 時間得自當前的本地時間和運行 SQL Server 的計算機操作系統中的時區設置。

2004-12-01 16:33:12.107

六、轉換函數 

Microsoft? SQL Server 2000 不自動執行不同數據類型的表達式轉換時,可使用轉換函數 CAST CONVERT 進行轉換。這些轉換函數還可用來獲得各種特殊的數據格式。這兩個轉換函數都可用於選擇列表、WHERE 子句和允許使用表達式的任何地方。

 

如果希望 Transact-SQL 程序代碼遵從 SQL-92 標準,請使用 CAST 而不要使用 CONVERT。如果要利用 CONVERT 中的樣式功能,請使用 CONVERT 而不要使用 CAST

 

使用 CAST CONVERT 時,需要兩條信息:

 

要轉換的表達式(例如,銷售報告要求銷售數據從貨幣型數據轉換爲字符型數據)。

 

要將所給表達式轉換到的數據類型,例如,varchar SQL Server 提供的任何其它數據類型。

除非將被轉換的值存儲起來,否則轉換僅在 CAST CONVERT 函數的作用期內有效。

 

在下面的示例中,第一個 SELECT 語句中使用 CAST,第二個 SELECT 語句中使用 CONVERT,將 title 列轉換爲 char(50) 列,以使結果更可讀:

 

SELECT CAST(title AS char(50)), ytd_sales

FROM titles

WHERE type = 'trad_cook'

 

 

SELECT CONVERT(char(50), title), ytd_sales

FROM titles

WHERE type = 'trad_cook'

 

下面是結果集:(對任何一個查詢)

 

                                                  ytd_sales

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

Onions, Leeks, and Garlic: Cooking Secrets of the       375

Fifty Years in Buckingham Palace Kitchens             15096

Sushi, Anyone?                                         4095

 

(3 row(s) affected)

 

在下面的示例中,int 類型的ytd_sales 列轉換爲 char(20) 列,從而可以對該列使用 LIKE 謂詞:

 

SELECT title, ytd_sales

FROM titles

WHERE CAST(ytd_sales AS char(20)) LIKE '15%'

   AND type = 'trad_cook'

 

下面是結果集:

 

Title                                          ytd_sales

 

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

 

Fifty Years in Buckingham Palace Kitchens          15096

 

(1 row(s) affected)

 

SQL Server 自動處理某些數據類型的轉換。例如,如果比較 char datetime 表達式、smallint int 表達式、或不同長度的 char 表達式,SQL Server 可將它們自動轉換。這種轉換稱爲隱性轉換。對這些轉換不必使用 CAST 函數。但是,在下列情況下使用 CAST 都是可以接受的:

 

兩個表達式的數據類型完全相同。

 

兩個表達式可隱性轉換。

 

必須顯式轉換數據類型。

如果試圖進行不可能的轉換(例如,將含有字母的 char 表達式轉換爲 int 類型),SQL Server 將顯示一條錯誤信息。

 

如果轉換時沒有指定數據類型的長度,則 SQL Server 自動提供長度爲 30

 

轉換爲 datetime smalldatetime 時,SQL Server 將拒絕所有無法識別爲日期的值(包括 1753 1 1 日以前的日期)。當日期處於適當的範圍內(1900 1 1 日到 2079 6 6 日)時,可將 datetime 值轉換爲 smalldatetime。時間值被四捨五入爲最接近的分鐘數。

 

轉換爲 bit 將把任何非零值都更改爲 1

 

轉換爲 money smallmoney 時,整數後將加上貨幣單位。例如,整數值 4 被轉換爲貨幣時相當於 4 美元(對於默認語言 us_english)。浮點值的小數部分將四捨五入爲四位小數以用於 money 值。將要轉換爲整數數據類型的 char varchar 數據類型的表達式中,只能包含數字和可選的加號或減號(+ -)。將忽略前導空格。要轉換爲 money char varchar 數據類型的表達式,還可包含可選的小數點和前導美元符號 ($)

 

要轉換爲 float real 數據類型的 char varchar 類型表達式還可選擇性地包含指數符號(e E,後面有可選的 + - 符號,再後面是數字)。

 

將字符表達式轉換爲其它大小的數據類型時,對於新的數據類型過長的值將被截斷,SQL Server 將在 osql 實用工具和 SQL 查詢分析器中顯示星號 (*)。若數字表達式對於新的數據類型太長而無法顯示,值將截斷。下面是字符截斷的示例:

 

SELECT SUBSTRING(title, 1, 25) AS Title, CONVERT(char(2), ytd_sales)

FROM titles

WHERE type = 'trad_cook'

 

下面是結果集:

 

Title                       

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

Onions, Leeks, and Garlic * 

Fifty Years in Buckingham * 

Sushi, Anyone?            * 

 

(3 row(s) affected)

 

在進行數據類型轉換時,若目標數據類型的小數位數小於源數據類型的小數位數,則該值將被截斷。例如,CAST(10.3496 AS money) 的結果是 $10.35

 

可將 text 數據顯式轉換爲 char varchar,將 image 顯式轉換爲 binary varbinary。由於這些數據類型被限制爲 8,000 個字符,所以轉換也限制爲 character binary 數據類型的最大長度,即 8,000 個字符。可將 ntext 數據顯式轉換爲 nchar nvarchar,但最大長度爲 4,000 個字符。如果沒有指定長度,被轉換的值的默認長度爲 30 個字符。不支持隱式轉換。

 

style 參數

datetime 數據轉換爲 char varchar 數據時,CONVERT style 參數提供了各種日期顯示格式。爲 style 參數提供的數值確定了 datetime 數據的顯示方式。年份可以顯示爲兩位或四位數。默認情況下,SQL Server 將年份顯示爲兩位數。若要顯示包括世紀的四位數年份 (yyyy)(即使年份數據是使用兩位數的年份格式存儲的),請給 style 值加 100 以獲得四位數年份。

 

以下示例顯示用 style 參數進行轉換:

SELECT CONVERT(char(10), GETDATE(), 111) + ' ' + CONVERT(char(8), GETDATE(), 108)

此語句把當前日期轉換爲樣式 111yyyy/mm/dd + hh:mm:ss

2004/12/02 13:46:42

請參見

 

CAST CONVERT

 

函數

 

在表中,左側的兩列表示將 datetime smalldatetime 轉換爲字符數據的 style 值。給 style 值加 100,可獲得包括世紀數位的四位年份 (yyyy)

 

不帶世紀數位 (yy) 帶世紀數位 (yyyy)

標準

輸入/輸出**

- 0 100 (*)  默認值 mon dd yyyy hh:miAM(或 PM

1 101 美國 mm/dd/yyyy

2 102 ANSI yy.mm.dd

3 103 英國/法國 dd/mm/yy

4 104 德國 dd.mm.yy

5 105 意大利 dd-mm-yy

6 106 - dd mon yy

7 107 - mon dd, yy

8 108 - hh:mm:ss

- 9 109 (*)  默認值 + 毫秒 mon dd yyyy hh:mi:ss:mmmAM(或 PM

10 110 美國 mm-dd-yy

11 111 日本 yy/mm/dd

12 112 ISO yymmdd

- 13 113 (*)  歐洲默認值 + 毫秒 dd mon yyyy hh:mm:ss:mmm(24h)

14 114 - hh:mi:ss:mmm(24h)

- 20 120 (*)  ODBC 規範 yyyy-mm-dd hh:mm:ss[.fff]

- 21 121 (*)  ODBC 規範(帶毫秒) yyyy-mm-dd hh:mm:ss[.fff]

- 126(***) ISO8601 yyyy-mm-dd Thh:mm:ss:mmm(不含空格)

- 130* 科威特 dd mon yyyy hh:mi:ss:mmmAM

- 131* 科威特 dd/mm/yy hh:mi:ss:mmmAM

 

*    默認值(style 0 1009 10913 11320 12021 121)始終返回世紀數位 (yyyy) 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章