|
|
1
442
即使几年后,这仍然会频繁地获得额外的选票,因此我需要为现代版本的SQL Server更新它。对于SQL Server 2008及更高版本,它很简单:
注意,靠近底部的最后三个段落仍然适用,您通常需要后退一步,首先找到一种避免投射的方法。 但也有其他的方法来实现这一点。这是最常见的。 正确的方法(自SQL Server 2008以来的新方法):
正确的方法(旧的):
它现在已经变老了,但仍然值得知道,因为它还可以很容易地适应其他时间点,比如月的第一个时刻、分钟、小时或年。 这种正确的方法使用的文档化函数是ANSI标准的一部分,并且保证可以工作,但是速度可能会慢一些。它的工作原理是,找出从第0天到当前一天有多少天,然后将这些天添加回第0天。无论您的日期时间是如何存储的,也不管您的区域设置是什么,它都会工作。 快车道:
这是因为datetime列存储为8字节的二进制值。将它们强制转换为浮点型,将它们强制转换为删除分数,当您将值强制转换回datetime时,值的时间部分将消失。它只是一点点的变化,没有复杂的逻辑,而且 非常 快。 请注意,这依赖于微软随时可以自由更改的实现细节,即使是在自动服务更新中。它也不是很轻便。在实践中,这种实现不太可能在短时间内改变,但是如果您选择使用它,那么注意到危险仍然很重要。现在我们有了一个约会的选择,这是很少必要的。 错误的方式:
错误的方法是转换为字符串、截断字符串并转换回日期时间。它是 错误的 ,有两个原因:1)它可能不适用于所有地区;2)它是实现这一目标最慢的方法……不仅仅是一点点,它就像一个数量级或两个比其他选项慢。 更新 这最近得到了一些投票,因此我想补充一点,自从我发布了这篇文章以来,我已经看到了一些非常可靠的证据,即SQL Server将优化“正确”方式和“快速”方式之间的性能差异,这意味着您现在应该更喜欢前者。 无论哪种情况,你都想 编写您的查询,以避免首先需要执行此操作 . 在数据库上做这项工作是非常罕见的。 在大多数地方,数据库已经是您的瓶颈。通常情况下,添加硬件以提高性能最昂贵的服务器和最难正确添加硬件的服务器(例如,您必须平衡磁盘和内存)。从技术和业务角度来看,向外扩展也是最困难的;从技术上讲,添加Web或应用程序服务器比添加数据库服务器要容易得多,即使这是错误的,您也不会为IIS或Apache支付每台服务器20000美元以上的许可证。 我试图指出的一点是,只要有可能,您就应该在应用程序级别完成这项工作。这个 只有 在SQL Server上截断日期时间应该是您需要按天分组的时候,即使这样,您也应该有一个额外的列设置为计算列,在插入/更新时维护,或者在应用程序逻辑中维护。让这个索引中断,CPU繁重的工作离开你的数据库。 |
|
|
2
44
仅限SQL Server 2008
如果你想的话,把它转换回datetime。
|
|
|
3
20
为了得到更完整的答案,这里有一种工作方式,可以将数据部分截短,包括分钟(替换
这与公认的答案不同,因为您不仅可以使用
注意,在上面的表达式中,
|
|
|
4
7
我在网上找到的一个片段是:
|
|
|
5
1
在SQL 2005中,可以这样编写trunc_日期函数。 (1)
第一种方法要干净得多。它只使用3个方法调用,包括final cast(),不执行字符串连接,这是一个自动的加号。此外,这里也没有大型铸件。如果您可以想象日期/时间戳是可以表示的,那么从日期转换为数字和返回日期是一个相当容易的过程。 (2)
如果您担心微软的日期时间(2)或(3)的实现可能是好的。 (3)
第三,更详细的方法。这需要将日期拆分为年份、月份和日期部分,将它们组合成“YYYY/MM/DD”格式,然后将其转换回日期。这个方法涉及7个方法调用,包括final cast(),更不用说字符串连接。 |
|
|
6
1
|
|
|
7
0
选择cast(floor(cast(getdate()as float))作为datetime) 参考此: http://microsoftmiles.blogspot.com/2006/11/remove-time-from-datetime-in-sql-server.html |
|
|
8
0
对于来这里寻找将日期时间字段截断为不到一整天的方法的人(例如每分钟),可以使用以下方法:
如果今天是
若要将其停止的时间间隔更改为,请将1440.0替换为一天中的时间间隔数,例如:
(总是放一个
对于那些想知道
|
|
|
9
0
此查询应为您提供相当于
希望这有帮助! |
|
|
10
0
你也可以提取日期
此外,还可以访问datetime变量的部分并将它们合并到构造截断日期,如下所示:
|
|
|
11
0
神谕:
SQLServer:
可以类似地用于从日期截断分钟或小时。 |
|
|
12
0
您可以这样做(SQL 2008):
2009—05-28 |
|
|
13
-1
trunc(adate,“dd”)将截断min、sec和hrs SRC: http://www.techonthenet.com/oracle/functions/trunc_date.php |
|
|
malife89 · 将java中的字符串读取为正确的日期格式 9 月前 |
|
|
Shay Guy · 我应该如何解析日语“30小时”格式的时间进行数据分析? 12 月前 |
|
|
Abhishek Kulkarni · 根据日期时间条件填充pandas列 12 月前 |
|
|
Jas Mahay · 使用日期和日历:需要社区帮助来提高工作表的效率 1 年前 |
|
|
ViSa · 如何从Pandas的列中提取日期? 1 年前 |
|
|
Wolfspirit · 你如何确定一个时间点是否在一个时间段内? 1 年前 |
|
Steven · Python的美国/纽约时间偏移显示-04:56 1 年前 |