我有如下结构的表:有道索引日期和时间列
create table MyTable (
ID int identity,
Whatever varchar(100),
MyTime time(2) not null,
MyDate date not null,
MyDateTime AS (DATEADD(DAY, DATEDIFF(DAY, '19000101', [MyDate]),
CAST([MyDate] AS DATETIME2(2))))
)
计算列添加日期和时间到单个DATETIME2字段。对阵表大部分查询有以下条款的一种或多种:
... WHERE MyDate < @filter1 and MyDate > @filter2
... ORDER BY MyDate, MyTime
... ORDER BY MyDateTime
简而言之,日期通常用于过滤和完整的日期,时间被用于排序。现在的问题:
- 最好的方法来设置这3个日期时间柱的指数? 2日期和时间单独或可能1日期和复合日期时间1,或其他?在这个表上有很多插入和更新,我想避免索引过多。
- 正如我写这个问题,我注意到长和有点丑陋的计算列定义。我从前一个地方捡起它,忘记调查是否有更简单的方法。有没有更简单的方法将date和time2合并到datetime2中?简单的添加不起作用,我不知道我是否应该避免投射到varchar,合并和投射回来。
我只需要问清楚:为什么你需要单独的日期和时间列? –
有一种感觉,这个问题会弹出..它可以被修改成一个单一的datetime2列,但往往只有时间部分的变化和大量的查询按日期部分过滤,并剥离时间创建的问题在选择过去在x和y之间不会包含y日期,因为时间默认为00:00:00,需要将其更改为23:59:59以包含整个日期。 – Jeti