Microsoft SQL Server/DataTypes

参见[1]

分为非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)