相关疑难解决方法(0)

如何在SQL Server中截断日期时间?

在SQL Server 2008中截断日期时间值(删除小时分钟和秒)的最佳方法是什么?

例如:

declare @SomeDate datetime = '2009-05-28 16:30:22'
select trunc_date(@SomeDate)

-----------------------
2009-05-28 00:00:00.000
Run Code Online (Sandbox Code Playgroud)

sql-server datetime truncate sql-server-2008

265
推荐指数
4
解决办法
50万
查看次数

什么是最常见的SQL反模式?

我们所有使用关系数据库的人都已经学习(或正在学习)SQL是不同的.引出期望的结果,并且有效地进行,涉及一个繁琐的过程,其部分特征是学习不熟悉的范例,并发现我们最熟悉的一些编程模式在这里不起作用.您见过(或自己承诺)的常见反模式有哪些?

sql anti-patterns

226
推荐指数
28
解决办法
7万
查看次数

如何删除日期时间值(SQL Server)的时间部分?

这是我使用的:

SELECT CAST(FLOOR(CAST(getdate() as FLOAT)) as DATETIME)
Run Code Online (Sandbox Code Playgroud)

我想可能会有更好更优雅的方式.

要求:

  • 它必须尽可能快(铸造越少越好).
  • 最终结果必须是datetime类型,而不是字符串.

sql-server datetime date-conversion

81
推荐指数
4
解决办法
6万
查看次数

SQL Server中最有效的方法是从日期+时间获取日期?

在MS SQL 2000和2005中,给定日期时间,例如'2008-09-25 12:34:56',获得仅包含'2008-09-25'的日期时间的最有效方法是什么?

这里重复一遍.

sql t-sql sql-server

73
推荐指数
4
解决办法
7万
查看次数

比较T-SQL中的日期,忽略时间部分

我正在使用MS SQL 2005,我想检查两个日期是否相等,但忽略了时间部分.

我知道我可以使用DATEDIFF,但我担心它可能会很慢 - 这个SP在DB中被大量使用!

有什么建议?

编辑:大卫安德烈斯的评论:

"比较"不仅包括"平等"
让我意识到我没有让我的问题足够清楚 - 我实际上只是在检查是否平等,就是这样.

sql t-sql sql-server sql-server-2005

61
推荐指数
3
解决办法
7万
查看次数

只需要DateTime中的日期

我在SQL中有一个DateTime类型的变量.只需要将Date作为其中的一部分.

请帮忙?

t-sql sql-server datetime date

2
推荐指数
2
解决办法
1971
查看次数

SQL Server DateTime参数'舍入'警告

更多的警告而不是问题:

我们今天早上解决了一个非常令人费解的错误.我们有各种报告,允许用户输入他们想要运行的日期范围.假设是,如果您要求从2010年8月1日到2010年8月10日的报告,您打算包括 8/10/2010,那么报告的结束日期不是8/10,那是之后的事情.

它不能是8/11/2010,因为这些报告中的一些汇总了一天中发生的所有事情,在那一天将它们分组到午夜,因此每日汇总将包括额外的一天 - 而不是我们想要的.

为了避免错过任何非常接近当天结束的项目的可能性,我们将结束日期计算为比明天更少的"一个标记":

public static DateTime EndOfDay(DateTime day)
{
    return day.Date.AddDays(1).AddTicks(-1);
}
Run Code Online (Sandbox Code Playgroud)

在内部,这最终会像8/10/2010 12:59:59.9999PM

好吧,当你将这个DateTime传递给SQL Server中的DATETIME参数时,它会将值UP舍入到8/11/2010 00:00:00!因为我们的查询使用

DateField BETWEEN @FromDate AND @ToDate
Run Code Online (Sandbox Code Playgroud)

代替

DateField >= @FromDate AND DateField < @ToDate
Run Code Online (Sandbox Code Playgroud)

我们看到2010年8月1日至2010年8月10日的报告中包含了2010年11月8日的报告.

我们发现真正问题的唯一方法是通过字符串往返日期.DateTime.ToString()也是如此,所以我们最终得到了SQL Server很满意的8/1/2010 12:59:59 PM.

所以现在我们的'结束日'方法看起来像这样:

public static DateTime EndOfDay(DateTime day)
{
    // Cant' subtract anything smaller (like a tick) because SQL Server rounds UP! Nice, eh?
    return day.Date.AddDays(1).AddSeconds(-1);
}
Run Code Online (Sandbox Code Playgroud)

抱歉不是问题 - 只是觉得有人可能觉得它很有用.

sql-server datetime stored-procedures

1
推荐指数
1
解决办法
2094
查看次数