当前位置: 首页 > 面试题库 >

MS SQL日期,没有时间

吕志诚
2023-03-14
问题内容

问题

大家好,

在相当长的一段时间里,我对于使用T-SQL构造DateTime SQL类型感到困惑。本质上,我想将DateTime值设置为2008-12-1
14:30:12并将其设置为2008-12-1
00:00:00。我们为报表运行的许多查询都在WHERE子句中使用日期值,但我要么将日期的开始和结束日期设置为天,然后使用BETWEEN,要么找到其他方法。

目前,我正在使用以下内容: WHERE CAST(CONVERT(VARCHAR, [tstamp], 102) AS DATETIME) = @dateParam

但是,这似乎有些笨拙。我希望会有更简单的东西 CAST([tstamp] AS DATE)

在线上的某些地方建议使用DATEPART()函数,但最后我得到的是这样的东西:

WHERE DATEPART(year, [tstamp]) = DATEPART(year, @dateParam)
AND DATEPART(month, [tstamp]) = DATEPART(month, @dateParam)
AND DATEPART(day, [tstamp]) = DATEPART(day, @dateParam)

也许我太在意小事了,如果是的话,请告诉我。我只想确保我正在写的东西尽可能高效。我想消除任何薄弱环节。

有什么建议?

谢谢,
C

解决方案

感谢大家的宝贵意见。很多有用的信息。我将改变我们的功能,以消除操作员左侧的功能。尽管我们的大多数日期列都不使用索引,但它可能仍然是一种更好的做法。


问题答案:

这对性能非常不利,请看一看“只有在数据库中才能通过更改几行代码来获得1000%+的改进”

操作员左侧的功能不良

这是你需要做的

declare @d datetime
select @d =  '2008-12-1 14:30:12'

where tstamp >= dateadd(dd, datediff(dd, 0, @d)+0, 0)
and tstamp < dateadd(dd, datediff(dd, 0, @d)+1, 0)

运行此命令以查看其作用

select dateadd(dd, datediff(dd, 0, getdate())+1, 0)
select dateadd(dd, datediff(dd, 0, getdate())+0, 0)


 类似资料:
  • 问题内容: MSSQL 2005数据库具有排序规则“ German_Phonebook_BIN”(但这并不重要)。通过PDO和FreeTDS(使用Debian Squeeze下的PHP)完成与db的连接。当我尝试从表中选择日期时间值时,我得到如下结果: 2008年4月1日12:00:00:000 但我希望得到 2008-01-01 00:00:00 (关于时间00:00:00转换为12:00:00

  • 问题内容: 如何在Java中比较没有时间的日期? 此代码比较时间和日期! 问题答案: 尝试比较将时间更改为00:00:00的日期(使用此功能):

  • 问题内容: 这个问题已经在这里有了答案 : 如何仅从SQL Server DateTime数据类型返回日期 (43个答案) 6年前关闭。 GETDATE()包含时间。而不是得到 我怎样才能得到: 问题答案: 对SQL Server的偏见 在SQL Server中删除日期时间的时间部分的最佳方法 SQL Server中从日期和时间获取日期的最有效方法? 概括 SQL Server 2008具有类型。

  • 问题内容: 我必须比较hibernatehql查询中的两个日期。我在我的Java bean中使用java.util.Date,并在MySQL数据库中将时间戳用作数据类型。 上面的查询将时间与日期进行比较。我应该怎么做才能在没有时间的情况下比较上述查询中的日期。 问题答案: 有关可用的日期功能,请参见Hibernate文档。 http://docs.jboss.org/hibernate/orm/3

  • 问题内容: 继续从Stack Overflow问题Java程序获取没有时间戳的当前日期: 没有时间获取Date对象的最有效方法是什么?除了这两种以外,还有其他方法吗? 更新: 我知道乔达·时代;我只是想避免为这样一个简单的任务增加库(我认为)。但是根据到目前为止的答案,《乔达时报》似乎非常受欢迎,因此我可以考虑一下。 通过高效的,我的意思是我想避免临时对象String的创建13759 method

  • 本文向大家介绍Oracle Database 生成没有时间成分的日期,包括了Oracle Database 生成没有时间成分的日期的使用技巧和注意事项,需要的朋友参考一下 示例 所有DATE都有时间成分;但是,习惯上存储不需要将时间/分钟/秒设置为零(即午夜)的时间信息的日期。 使用ANSIDATE文字(使用ISO 8601日期格式): 使用以下命令将其从字符串文字转换为TO_DATE(): (有