【发布时间】:2009-09-01 12:31:15
【问题描述】:
我使用的是 MS SQL Server 2005,我需要部分存储日期值。例如,日期的日期部分实际上可能仍然未知,但 MS SQL Server 限制指定完整日期,如下所示:
INSERT foo(dt) VALUES('2001-10-31');
不过我想用这样的东西:
INSERT foo(dt) VALUES ('2001-10-??');
当然,MS SQL 不能接受这样的日期,我找到了一个将日期部分转换为乘数的粗略示例:
SET NOCOUNT ON
CREATE TABLE foo (
dt INT
)
INSERT foo VALUES (
DATEPART(YEAR, GETDATE()) * 10000
+ DATEPART(MONTH, GETDATE()) * 100
+ DATEPART(DAY, GETDATE())
)
SELECT dt FROM foo
DROP TABLE foo
...嗯,我不敢相信这是否是解决问题的唯一方法,所以我想问:我如何以最好的方式解决这个问题?
提前致谢。
UPD 2014:
另见Storing partial dates in a database
【问题讨论】:
-
你为什么不知道完整的日期?没有完整日期的日期字段有什么用?
-
有时日期的日期部分确实是未知的。例如,我可以填写一张稀有的未发行音乐演示唱片,但该唱片的日期可能有误或部分日期未指明录制日期。所以我想保留延期填写备案信息的可能性
标签: sql sql-server sql-server-2005 datetime