gpt4 book ai didi

sql-server - 如何在 SQL Server 表中保存回历日期?什么类型的柱?

转载 作者:行者123 更新时间:2023-12-02 23:18:38 25 4
gpt4 key购买 nike

如何在 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 来执行此操作,但许多托管环境不允许您执行此操作

如果您想要报告,我建议您以固定格式存储它们,例如 char(19) 列中的 yyyy/MM/dd HH:mm:ss基于 Hijri 日期,还将 UTC 时间存储在另一列中以供进一步使用或全局化。

如果您使用我上面提到的模式存储它们,您可以轻松比较它们,并且只需使用 SUBSTRING 提取部分值即可获取日期时间的特定部分(年、小时……)

请记住,您始终可以将 UTC 时间和时区存储在数据库中,但我的经验表明您迟早会在报告方面遇到困难。

另一点是永远不要尝试在 DateTimes 中存储 Hijri 日期,因为你不能这样做。例如,1394/02/31 是回历日期,但 DateTime 中不能包含 2 月 31 日。

假设您想要生成每天创建的项目的报告。如果您将日期存储为 UTC,则必须通过特定时区差异和夏令时将每个日期时间转换为回历,然后按其分组,您将面临巨大的性能下降。例如,尝试计算 1393/12/201394/01/10 的报告,然后您就会明白为什么不使用 UTC 日期时间来进行此类报告内容.

关于sql-server - 如何在 SQL Server 表中保存回历日期?什么类型的柱?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30752319/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com