|
|
1
39
据我所知,不存在返回这个函数,您必须硬设置它。 尝试从0等值强制转换以获取最小日期将默认为01-01-1900。 如前所述,最好将其设置为空(如果需要,请在阅读时使用isNull),或者如果您担心设置正确,甚至可以在表上设置触发器,以便在编辑时设置修改日期。 如果你已经确定了最短的日期,那么: create table atable ( atableID int IDENTITY(1, 1) PRIMARY KEY CLUSTERED, Modified datetime DEFAULT '1753-01-01' ) |
|
|
2
15
我同意“不要使用魔法值”中的观点。但我想指出的是,有时采用这种解决方案是合法的。 设置列可以为空是有代价的:空是不可索引的。类似“获取自2010年初以来未修改的所有记录”的查询包括那些从未修改过的记录。如果我们使用一个可以为空的列,那么就必须使用[modified]<@cutoffdate或[modified] 是空的 ,这反过来强制数据库引擎执行表扫描,因为没有索引空值。这最后 可以 成为一个问题。 在实践中,如果不引入实际的、真实的性能惩罚,那么应该使用空值。但是很难知道,除非你知道现在的实际数据量是多少,并且在所谓的可预见的未来会是多少。您还需要知道是否有很大一部分记录具有特殊的值——如果是这样,那么索引它就没有意义了。 简而言之,根据死亡/经验法则,一个人应该为空。但是,如果有大量的记录,数据经常被查询,并且只有很小的一部分记录具有空/特殊值,那么根据这些信息定位记录可能会获得显著的性能增益(当然,只要创建了索引!)我觉得这有时可以证明“魔法”值的使用是合理的。 |
|
|
3
11
“也许我应该让它空着” 不要使用幻数-这是一个糟糕的做法-如果你没有一个值,就让它为空 否则,如果您真的想要一个默认日期-使用发布的其他技术之一来设置一个默认日期 |
|
|
4
5
除非你正在做数据库来跟踪一个多世纪前的历史时间,使用
完全安全可靠,允许比“1753-01-01”更优雅的查询,比“1753-01-01”更高效的查询
但是,自从第一次修改
这样就避免了整个问题,并且使插入更容易、更安全——就像你根本不插入它,而SQL做家务一样:—)
有了它,您仍然可以使用0进行优雅和快速的查询,因为它被保证总是低于任何生成的插入。
|
|
|
5
3
有时,您继承的脆弱代码已经在很多地方期望魔法值。每个人都是正确的,如果可能,您应该使用空值。但是,作为确保对该值的每个引用都相同的快捷方式,我喜欢将SQL中的“常量”(因为缺少更好的名称)放在一个scaler函数中,然后在需要该值时调用该函数。这样,如果我想把它们都更新成其他的东西,我可以很容易地做到。或者如果我想改变默认值,我只有一个地方可以更新它。 下面的代码创建函数和一个表,使用它作为默认的日期时间值。然后插入并从表中选择,而不指定要修改的值。然后自己清理。我希望这有帮助。
|
|
6
0
我认为你唯一的选择是一个常数。上面说了——不要用它——坚持空值而不是假日期。
|
|
|
7
0
我想这会奏效…
编辑:这是错误的…最小的SQL日期时间值是1/1/1753。我的解决方案提供日期时间=1/1/1900 00:00:00。其他答案有正确的最短日期… |
|
|
sqlrobert · SQL-如何查找不包含特定字段值的一组记录 3 年前 |
|
|
Nick Fleetwood · 调度语法的LINQ查询 4 年前 |
|
|
Mateen Bagheri · 选择表的计数并选择其自身 4 年前 |
|
Java · 使用交叉应用同时显示两列 4 年前 |