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格式。

參考文獻[編輯]

  1. Data types (Transact-SQL)