如何避免在SQL Server中存储datetime
的时间部分,即如果我的值为2011-01-01 00:00:00.000
我只想存储2011-01-01
?仅在SQL Server 2005中存储日期
我想确保只有日期部分存储。
如何避免在SQL Server中存储datetime
的时间部分,即如果我的值为2011-01-01 00:00:00.000
我只想存储2011-01-01
?仅在SQL Server 2005中存储日期
我想确保只有日期部分存储。
DateTime数据类型总是存储日期和时间。因此,您只需使用CONVERT/CAST来获取特定格式,或者根据您的需要使用YEAR(),MONTH()或DAY()方法来隔离日期详细信息。
最简单的解决方案就是不公开时间部分给用户。但是,如果确实需要确保仅存储日期部分,则可以在存储该值之前将时间部分强制为午夜/正午/任意一个固定时间。
内置的DATETIME数据类型存储日期和时间数据。如果你只指定日期部分,那么时间将是12:00:00或类似的东西。
滑稽的故事:我看到了一个数据库,一旦那里有一个日期和时间字段,无论是存储日期和时间,但每次只使用了一半的数据。有些人做的愚蠢的事情:)
无论是添加计算列:
dateonly AS CONVERT(DATETIME, CONVERT(CHAR(8), date_with_time, 112), 112)
或截断上插入你的约会权:
INSERT
INTO mytable (dateonly)
VALUES CONVERT(DATETIME, CONVERT(CHAR(8), GETDATE(), 112), 112)
,使得CHECK
您dateonly列,以提高一个错误,当有人试图插入非截断值:
CHECK (dateonly = CONVERT(DATETIME, CONVERT(CHAR(8), date_with_time, 112), 112))
只是表示日期为yyyMMdd
整数值。
或者你可以忽略列的时间部分,并让它默认。只要确保只在插入/更新值时才提供日期。 – 2009-08-24 17:45:34