如何在 Microsoft SQL Server 表中保存回历日期 (0000/01/01-9999/01/01)?什么类型的柱?
我选择datetime2
, 这样对吗?
CREATE TABLE [dbo].[MyDates](
[ID] [int] IDENTITY(1,1) NOT NULL,
[Title] [nvarchar](50) NULL,
[Date] [datetime2](0) NULL,
CONSTRAINT [PK_MyDates] PRIMARY KEY CLUSTERED
(
[ID] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]
我不知道为什么人们对此表示反对,但如果您曾经编写过与波斯日期交互的程序,并且需要根据日期和时间生成报告,您就会明白为什么应该将其存储为纯字符串值。 sql server 缺乏将 UTC 转换为不同时区的能力,您应该使用 clr 来执行此操作,但许多托管环境不允许您执行此操作
我建议您以固定格式存储它们,例如yyyy/MM/dd HH:mm:ss
in char(19)
如果您希望获得基于回历日期的报告,请将 UTC 时间存储在另一列中以供进一步使用或全球化。
如果您使用我上面提到的模式存储它们,您可以轻松比较它们,并且只需通过使用提取部分值即可获取日期时间的特定部分(年,小时,...)子串
请记住,您始终可以将带有时区的 UTC 时间存储在数据库中,但我的经验表明您迟早会在报告方面遇到困难。
另一点是永远不要尝试在 DateTimes 中存储回历日期,因为你不能这样做。例如1394/02/31
是回历日期,但在 DateTime 中不能有 2 月 31 日。
假设您想要生成每天创建的项目的报告。如果您将日期存储为 UTC,则必须通过特定时区差异和夏令时将每个日期时间转换为回历,然后按其分组,您将面临巨大的性能下降。例如尝试计算报告1393/12/20
to 1394/01/10
然后您就会明白为什么不使用 UTC 日期时间来进行此类报告。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)