SQL Server日期数据类型是什么?

3

我正在为一个处理日程安排和处理重复事件的应用程序创建一个表格。 我需要指示事件可能在哪些日期和时间重复发生(例如每周一和周三下午1点)。 是否有一个数据类型可以处理仅一周内的天数而不输入具体日期,还是我需要创建另一个包含一周内天数并引用这些天数的FK的表格? 显然,这很不理想,因为它会使处理在午夜之前开始并在午夜之后结束的事件更加复杂。


3
TINYINT - 因为数字日期只能取值从1到7(或0到6)- 实际上没有必要使用比TINYINT更大的数据类型,因为TINYINT可以取值范围高达255 (占用1个字节的存储空间)。 - marc_s
使用tinyinteger/byte,范围可以是0到6或1到7。 - Allan S. Hansen
你可以使用 smallint - MusicLovingIndianGirl
2个回答

3
请使用smallint类型来存储一周中的日期。
如果您正在使用SQL Server 2008,可以使用新的时间数据类型来存储每天的时间列。否则,您仍需要使用datetime数据类型。请参考这里了解更多信息。

2
我要补充的一件事是,在列上创建一个CHECK约束,要求值在1到7之间(或0到6,具体取决于实现)。另外...为什么使用smallint而不是tinyint? - Aaronaught
@Aaronaught:有趣的是,多年后,另一个开发人员会认为一周从星期一开始,并编写相应的代码(可能绕过您在代码中使用的枚举)。另一个人会认为它从星期日开始。可能有些人不知道为什么你用数字而不是字符表示星期几。我建议创建另一个表,将数字映射到一周中的某一天;并引用该表来获取一周中的日期。这需要额外的工作,可能有点过度,但可以避免未来团队在生产环境中遇到麻烦的错误。 - Phil
@Phil:如果您计划支持多种语言,那么字符列不是一个好主意。但是,我总是在数据库中创建枚举表,除了代码中的枚举类型;它们当然互相不知道,但至少作为未来开发人员的参考存在。 - Aaronaught

1
看起来你需要类似这样的东西:
CREATE TABLE T (
    DAY_OF_WEEK TINYINT CHECK (DAY_OF_WEEK BETWEEN 1 AND 7)
    -- Other fields and constraints...
)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接