Microsoft SQL Server/DataTypes
外觀
參見[1]
char
[編輯]分為非UNICODE字符和UNICODE字符兩大類,後者以N識別。
- char(n) 是固定長度的字符串,最多 8,000 個字節;
- varchar(n) 是可變長度的字符串,最多 8,000 個字節;
- varchar(max) 是可變長度的字符串,最多 2 GB個字節;
- text 是可變長度的字符串,最多 2GB 字節數據。
- nchar(n) 是固定長度的Unicode 數據,最多 4,000 個字符;
- nvarchar(n) 是可變長度的Unicode 數據,最多 4,000 個字符;
- nvarchar(max) 是可變長度的 Unicode 數據,最多 536,870,912 個字符;
- ntext 是可變長度的Unicode 數據,最多 2GB 字符數據。
Binary類型
[編輯]- binary(n) 固定長度的二進制數據,最多 8,000 字節;
- varbinary(n) 是可變長度的二進制數據,最多 8,000 字節;
- varbinary(max) 是可變長度的二進制數據,最多2GB字節;
- image 是可變長度的二進制數據,最多2GB。
確切數值類型
[編輯]- bit 允許取值範圍為:0、1 或 NULL
- tinyint 從 0 到 255 的所有數,存儲1位元組;
- smallint 從 -32768到32767,存儲2位元組
- int 從 -2,147,483,648 到 2,147,483,647 的所有數字,儲存4位元組;
- bigint:,儲存8位元組
- decimal(p,s) 固定精度和比例的數字,允許從 -10^38 +1 到 10^38 -1 之間的數字,p 參數指示可以存儲的最大位數(小數點左側和右側),p 必須是 1 到 38 之間的值,默認是 18;s 參數指示小數點右側存儲的最大位數,s 必須 是 0 到 p 之間的值,默認是 0。儲存5-17位元組。ISO規定,DECIMAL和DEC是同義詞,所以寫DECIMAL或DEC是一樣的
- numeric(p,s) 等價於decimal(p,s)
- smallmoney
- money
近似數值類型
[編輯]- real 從 -3.40E + 38 到 3.40E + 38 的浮動精度數字數據,儲存4位元組等等多種數字類型
- float(n), n取值為24則佔4字節;n取值53則佔8字節,這為默認情形。
日期時間
[編輯]參見:System.Data.SqlDbType
- datetime:從1753年到9999年,精度3.33ms。8位元組。在使用時會捨入到捨入到 .000、.003 或 .007 秒三個增量,示例 2014-12-03 17:06:15.007。對應於.NET裏面的System.DateTime類型。 DateTime字段類型要用 GETDATE()
- datetime2:從1753年到9999年,精度100ns。6-8位元組。SQL Server 2008 中新的日期時間類型。對應的時間格式是 yyyy-MM-dd HH:mm:ss.fffffff ,7個f,精確到0.1微秒(μs),示例 2014-12-03 17:23:19.2880929 。DateTime2字段類型要用 SYSDATETIME() 。DATETIME2(n)
這個n是秒精度,n的範圍是0到7,對於小於3的精度,它需要6個字節; 對於介於3和4之間的精度,它需要7個字節; 對於所有其他精度,它需要8個字節。
- smalldatetime:從1900年到2079年,精度1分鐘。4位元組
- date:從0000年1月1日至9999年12月31日,3位元組
- time:僅存儲時間,精度100ns,3-5位元組。TIME(p)--n是秒精度,p範圍是0-7,如果沒指定默認是7。
- datetimeoffset:與datetime2相同,外加時區偏移。8-10位元組。SQL Server 2008 中新的日期時間類型。列名 AT TIME ZONE 'China Standard Time'
- timestamp:存儲內部時鐘值,當創建、修改行時該字段會更新。每個表只能有一個該類型字段。
如果開發新的應用程式,則應使用 time、 date、 datetime2和 datetimeoffest 數據類型。因為這些類型符合 SQL 標準,並且更具可移植性。此外,time、 datetime2和 datetimeoffest 具有更高的秒精度,並且 datetimeoffest 支持時區。
如果要將create_at列的默認值設置為當前日期和時間,則使用以下ALTER TABLE語句:
ALTER TABLE dbo.product_colors ADD CONSTRAINT df_current_time DEFAULT CURRENT_TIMESTAMP FOR created_at;
SQLServer 中如何比較日期大小?先將日期字符串變成日期類型。如convert(datetime,'2012-3-15')
。再使用where
子句:where time_field <= convert(datetime,'2012-3-15')
其他數據類型
[編輯]- cursor 對於包含對游標引用的變量或存儲過程output參數
- rowversion 在數據庫中自動生成的獨一無二的二進制數。
- hierarchyid 表示樹層次結構中的樹位置
- uniqueidentifier 16-byte GUID
- sql_variant 存儲其他數據類型的值
- XML 將XML數據存儲在列中,或XML類型的變量
- Spatial Geometry type(空間幾何類型) 在平坐標系中表示數據
- Spatial Geography type(空間地理類型) 存儲橢球(圓形地球)數據,例如GPS緯度和經度坐標
- table 暫時存儲結果集以供以後處理
數據類型轉換
[編輯]使用函數:CONVERT(data_type(length),data_to_be_converted,style)
其中:
- data_type(length)為目標數據類型(帶有可選的長度)
- data_to_be_converted 為需要轉換的值
- style為日期時間的輸出格式。如121對應ISO 8601格式。