Sql 启蒙运动需要消除datetime与smalldatetime之间的疑虑
我已经读过了,但还是不明白。希望这里有人能给我解释一下。我有一个查询,它为我的列指定了一个仅限当前日期的值。但是,我想知道如果我的查询如下所示,是否应将新列创建为Sql 启蒙运动需要消除datetime与smalldatetime之间的疑虑,sql,sql-server,sql-server-2005,date,datetime-format,Sql,Sql Server,Sql Server 2005,Date,Datetime Format,我已经读过了,但还是不明白。希望这里有人能给我解释一下。我有一个查询,它为我的列指定了一个仅限当前日期的值。但是,我想知道如果我的查询如下所示,是否应将新列创建为DATETIME或SMALLDATETIME: Insert into table(col A) Select DATEADD(day, DATEDIFF(day, 0, GETDATE()), 0) As ColA from table B 我想我的select语句已经给出了没有时间的日期值。我对在我的db表中创
DATETIME
或SMALLDATETIME
:
Insert into table(col A)
Select DATEADD(day, DATEDIFF(day, 0, GETDATE()), 0) As ColA
from table B
我想我的select语句已经给出了没有时间的日期值。我对在我的db表中创建列A
表示怀疑。我正在使用SQL2005
更新:所以我的qns是如何在我的db表中创建我的列A?我需要给它添加约束吗?首选哪种数据类型 SQL Server 2005不支持日期数据类型。这将是您真正想要的数据类型
smalldatetime
和datetime
都使用时间组件存储日期。这些内容将在中进行解释Smalldatetime
存储在四个字节中,datetime
存储在八个字节中
就您的目的而言,它们可能同样有用。差异是可以表示的范围和精度。在这两种情况下,准确度都远低于一天,因此在大多数情况下,这两种方法都适用于存储日期。您需要问一个明确的问题。这是问答论坛,不是讨论论坛。对不起,如果我不够具体,我会更新。感谢您指出,我添加了一个检查约束(DATEADD(DAY,DATEDIFF(DAY,0,CREATION_D),0)=CREATION_D),但不起作用,我做错了什么?回复:您在注释中的检查约束“未起作用”不是一个有用的诊断。它以什么方式不起作用?尝试应用时出错?允许的时间组件值?您希望允许的不允许的值?还有别的吗如果是这样的话,也许告诉我们你期望它做什么。如果是某种错误,请编辑您的问题并包含完整的脚本,而不是片段。好的,谢谢,您说这两个问题对我的案例同样有用。我也可以用这两种方法吗?那么,在创建列时,我还需要包含约束吗?如果您真的想要一个表示没有时间组件的约束,那么您可以这样做。我倾向于避免约束,将检查放在输入而不是表上(通常使用存储过程接口进行插入和更新)。