解剖SQLSERVER 第四篇 OrcaMDF里对dates类型数据的解析(译)
程序员文章站
2022-05-24 19:42:53
...
解剖SQLSERVER 第四篇 OrcaMDF里对dates类型数据的解析(译) http://improve.dk/parsing-dates-in-orcamdf/ 在SQLSERVER里面有几种不同的date相关类型,当前OrcaMDF 支持三种最常用的date类型:date,datetime,smalldatetime SqlDate实现 date 类型在三种
解剖SQLSERVER 第四篇 OrcaMDF里对dates类型数据的解析(译)
http://improve.dk/parsing-dates-in-orcamdf/
在SQLSERVER里面有几种不同的date相关类型,当前OrcaMDF 支持三种最常用的date类型:date,datetime,smalldatetime
SqlDate实现
date 类型在三种类型之中是最简单的,他是一个3个字节的定长类型,存储了日期值它支持的日期范围从0001-01-01到9999-12-31
默认值是1900-01-01
比较坑爹的是.NET里面还没有任何标准实现能够支持3个字节的整数类型,只有short类型和int类型,但是,他们要不太大要不太小
另外,要正确读取日期值,对于.NET的4字节整型我们必须执行一些转变去获取正确的数字
一旦我们获取到date的值,我们可以创建一个默认的datetime类型并且添加天数进去
public class SqlDate : ISqlType { public bool IsVariableLength { get { return false; } } public short? FixedLength { get { return 3; } } public object GetValue(byte[] value) { if (value.Length != 3) throw new ArgumentException("Invalid value length: " + value.Length); // Magic needed to read a 3 byte integer into .NET's 4 byte representation. // Reading backwards due to assumed little endianness. int date = (value[2] 16