【问题标题】:Enlightenment needed to clear doubts on datetime vs smalldatetime需要启蒙以消除对 datetime 与 smalldatetime 的疑虑
【发布时间】:2013-01-04 02:07:54
【问题描述】:

我已经阅读了这一点,但仍然无法理解。希望这里有人可以向我解释。我有一个查询,它为我的列分配了一个仅当前日期的值。但是我想知道如果我的查询是这样的,是否应该将新列创建为DATETIMESMALLDATETIME

  Insert into table(col A)
  Select DATEADD(day, DATEDIFF(day, 0, GETDATE()), 0) As ColA  
  from table B  

我想我的选择语句已经给了我没有时间的日期值。我对在我的数据库表中创建 Col A 表示怀疑。我正在使用 Sql 2005。

更新:
所以我的 qns 是如何在我的 db 表中创建我的 A 列?我需要添加约束吗?首选哪种数据类型?

【问题讨论】:

  • 您需要提出一个具体而明确的问题。这是问答论坛,不是讨论论坛。
  • 很抱歉,如果我不够具体,我会更新。谢谢指出
  • 我添加了一个 CHECK 约束 (DATEADD(DAY,DATEDIFF(DAY,0,CREATION_D),0)=CREATION_D) 但不起作用,我做错了什么?
  • 回复:您在 cmets 中的检查约束,“不起作用”不是有用的诊断。什么方式没有工作?尝试应用时出错?带有时间分量的允许值?您希望被允许的不允许值?还有什么? - 如果是这样,请告诉我们您期望它会做什么。如果是某种错误,请编辑您的问题并包含完整的脚本而不是片段。

标签: sql sql-server sql-server-2005 date datetime-format


【解决方案1】:

SQL Server 2005 不支持 date 数据类型。那将是您真正想要的数据类型。

smalldatetimedatetime 都存储带有时间组件的日期。这些在SQL Server documentation 中有解释。 Smalldatetime 存储在 4 个字节中,datetime 存储在 8 个字节中。

出于您的目的,它们可能同样有用。区别在于可以表示的范围和准确性。在这两种情况下,准确度都远低于一天,因此任何一种都适用于大多数用途的存储日期。

【讨论】:

  • 好的,谢谢,所以你说两者对我的情况同样有用。所以我也可以使用吗?那么在创建列时我还需要包含约束吗?
  • 如果你真的想要一个没有时间分量的约束,那么你可以这样做。我倾向于避免约束,将检查放在输入而不是表上(并且通常使用存储过程接口进行插入和更新)。
猜你喜欢
  • 1970-01-01
  • 2013-02-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多