比较本地DateTime和DateTimeOffset

比较本地DateTime和DateTimeOffset,datetime,sql-server-2008-r2,timezone,Datetime,Sql Server 2008 R2,Timezone,我有一个带有DateTime列的数据库,希望将其与某个DateTimeOffset进行比较。DateTime列为(服务器)本地时间。我对此无能为力,除了对WTF的缺点大喊大叫,我喜欢频繁而激烈地这样做,所以我现在可以跳过这里 我希望能够从表中选择DateTime x发生在DateTimeOffset之前的所有行。我可以接受这样的假设:如果现在服务器上是DST,那么DateTime列也在DST中,反之亦然。这些时间将定位在“现在”,日期时间(几乎)总是在过去的几个小时内。当DST发生变化时,我会对

我有一个带有DateTime列的数据库,希望将其与某个DateTimeOffset进行比较。DateTime列为(服务器)本地时间。我对此无能为力,除了对WTF的缺点大喊大叫,我喜欢频繁而激烈地这样做,所以我现在可以跳过这里

我希望能够从表中选择DateTime x发生在DateTimeOffset之前的所有行。我可以接受这样的假设:如果现在服务器上是DST,那么DateTime列也在DST中,反之亦然。这些时间将定位在“现在”,日期时间(几乎)总是在过去的几个小时内。当DST发生变化时,我会对下巴进行调整,但解决方案在DST或非DST中都不应该总是错误的

作为额外要求,表很大,因此不可能对DateTime执行任何操作。归根结底,我想我是在寻找

DECLARE @dto datetimeoffset(4) = '12-10-25 12:32:10 +06:00';

DECLARE @dt datetime = --this is where the magic happens?

SELECT * FROM MyTable WHERE datetimecol < @dt
DECLARE@dto datetimeoffset(4)='12-10-25 12:32:10+06:00';
声明@dt datetime=--这就是神奇发生的地方?
从datetimecol<@dt所在的MyTable中选择*

有谁能帮我实现这个神奇的过程吗?

您需要一个SQL CLR函数来实现这一点。受此启发,我写了以下内容:

使用系统;
使用Microsoft.SqlServer.Server;
公共类UserDefinedFunctions
{
[SqlFunction(IsDeterministic=false)]
公共静态日期时间?ConvertDateTimeOffsetToLocalDateTime(DateTimeOffset?dto)
{
如果(!dto.HasValue)
返回null;
返回dto.Value.ToLocalTime().DateTime;
}
}
如果愿意,您可以自己编译此脚本,也可以使用包含序列化二进制和SQL部署脚本的以下脚本进行部署:

EXEC sp_配置'clr enabled',1;
去
重新配置
去
创建程序集[SqlClrDateTime]
从…起0x4D5A9000030000004000000FFFF0000B8000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000E1FBA0E00B409CD21B8014CCD215468697320707266F6772616D2063616E6E6E6F7420626520726E20696E20444F53206D6F64652D0A2400000000000000000000000000000004C03004F68E45200000000000000E00210B010B08000000000000000EE26000000020000000 400000000000100020000200004000000000000000080000000000000000000000000000000000000300405000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000942600005700000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000200000080000000000000000000000000000000000000000000000000002E74657874000000F4600000002000000000000000000000000000000000000000000000002000000602E727372630000000C002000000040004000000000000000A0000000000000000000000000000000000000000400000402E72656C6F63000000000000000600000000000000000000020000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040000000000000000000004000000000000000000400000000000000000000000000000000000000000000000000050094200000C804000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001330001300000010000110F00280600000A2D0A1200FE150200001B062A002028070000A0B12012808000000A0C120228090000A730A00000A2E02280B00000A2A42534A4201000000000000000C76342E33303313900000000C0000070010000237E0000DC010000E001000023537472696E6773000000BC03000000002355300C040300000023475544000000D430000F400023426C6F62000000000020000001471502080900000FA253301600000000000000000A0000000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000B5009B000600E100CE001B00F50000000600240104010600440104A0098017D01000000010000000000000000000000000000100502000000096006C000A0001008C20000000008618910019000200000009700290091001D00310091002004100410091008004900910019005100910019000C00AD014C0000000C00BA0157002100C4015C0002000D00161001400010010010006006006006009009000020020002B02E0001300C1002E0000B0079002E001B00CA002E002300D3006C0045005000048000000000000000000000000000000000000000000000000000000000000000000000001003200000000000000000000000000000000000000000000001007100000000000000000000000000000000000000000000000003C4D64756C653E005376C436C724461746554696D652E646C6C00557365724566666666E65446756E63374696F6E73006D73636F726F726C696200537974656D0536F626C665656565656C6626A656363746C606C6C656031004461746554696D650044616746554696D65546461746554696D6554696D6572744461746554696D6554F667365546F4C66616C4461746554696D65002E63746F720064746F00537973746D2E52E562756E74696D6572747474646464767676766574646F76767474746275767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676760053797374656D2E52756E74696D6522752E74696D70696C6572535727669657300436F6D70696C6174696F6E52656C61786174696E734174726962757465052756E74696D65436F6D70617462696C69747941747269627574650053716C436C72446174655454696D6500573756D65005767676767676767676767664D464676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676768617356616C756500665745F56616C756500546F46C6F63616C54696D6500665745F44671746554696D65000000000320000000000004BECC7757F1E49B9400968748F570200008B77A5C561934E0890E000115110901101101101101101101101101101101101101101101100120010101010054020F49744657465726D69973746969696963009111011011011011000011100110011001100001001001D0520000D000110010010010010010004040F496197344657466151090909090909011011001100110011001100001001001001800D0001001001001001001001001001001001001001001001001001001001001010113000C070315110901110D111111114701001A2E4E45544676F726B2C5657273696F6E3D76342E3300540E144672616D65776F726B4469706C61794E616D656565465102E4552044204672616D65776F726B20340010000200000000000080000000010054021657761704E6F6E457676E4E47767676E4776767730000000004070000000B68E45700000000040000C010000000080000100100100540216577767676767F6E45700000000000040000400004000040000400004000040000735B6971B914293249E1EC9335A4E01000000000633A5C44465765C537716C436C724461746554696D655C53716C436C724461746554696D655C6626A5C52656C656173655C53716C6716C436C724461746554696D652E7064620000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000