从SQL Server中的datetime字段中删除时间部分时,哪种方法提供了最佳性能?
a) select DATEADD(dd, DATEDIFF(dd, 0, getdate()), 0)
Run Code Online (Sandbox Code Playgroud)
要么
b) select cast(convert(char(11), getdate(), 113) as datetime)
Run Code Online (Sandbox Code Playgroud)
第二种方法确实发送了更多的字节,但这可能没有转换速度那么重要.
两者似乎都非常快,但在处理数十万或更多行时速度可能会有所不同?
另外,是否有可能有更好的方法来摆脱SQL中日期时间的时间部分?
这是我使用的:
SELECT CAST(FLOOR(CAST(getdate() as FLOAT)) as DATETIME)
Run Code Online (Sandbox Code Playgroud)
我想可能会有更好更优雅的方式.
要求:
datetime类型,而不是字符串.在MS SQL 2000和2005中,给定日期时间,例如'2008-09-25 12:34:56',获得仅包含'2008-09-25'的日期时间的最有效方法是什么?
这里重复一遍.
大家好,
我在很长一段时间内遇到了一些困惑,基本上使用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
感谢大家的好评.很多有用的信息.我将改变我们的功能以消除操作员左侧的功能.虽然我们的大多数日期列都不使用索引,但它可能仍然是一种更好的做法.
我如何截断sql server 2008中的日期,如下所示:
我有2012-01-02 12:04:11.443,我只想选择2012-01-02 12:00:00.000和2012-01-02 12:04:00.000(小时和分钟级别)
如果我有一个日期值 2010-03-01 17:34:12.018
将此转化为最有效的方法是什么2010-03-01 00:00:00.000?
作为次要问题,模拟Oracle TRUNC功能的最佳方法是什么,这将允许您截断年,季,月,周,日,小时,分钟和第二边界?
我有一个字符串'2009-06-24 09:52:43.000',我需要将其插入到表的DateTime列中.
但是我不在乎时间,只想插入它作为2009-06-24 00:00:00.000
我怎么能在T-SQL中做到这一点?
我需要创建一个包含日期范围的临时表,以及一些包含占位符值(0)以供将来使用的列.我需要的日期是$ startDate和$ endDate之间每个月的第一天,这些变量可能相隔数年.
我原来的sql语句看起来像这样:
select dbo.FirstOfMonth(InsertDate) as Month, 0 as Trials, 0 as Sales
into #dates
from customer
group by dbo.FirstOfMonth(InsertDate)
Run Code Online (Sandbox Code Playgroud)
"FirstOfMonth"是一个用户定义的函数,它完全按照它所说的做,返回当月的第一天所提供的日期,时间恰好是午夜.
这几乎完全是我所需要的,直到我发现我的日期偶尔会出现间隙,我有几个月没有记录插入日期.由于我的结果仍然缺少几个月,我需要一个不同的方法.
我已经向存储过程添加了以下声明,预计它们需要我需要的日期范围...
declare $startDate set $startDate = select min(InsertDate) from customer
declare $endDate set $endDate = select max(InsertDate) from customer
Run Code Online (Sandbox Code Playgroud)
......但我不知道该怎么做.
我知道这个问题与这个问题类似,但是坦率地说,这个答案已经过去了(我不经常使用SQL,当我这样做时,它往往是在旧版本的SQL Server上)并且有一些小问题差点让我失望.
是否可以编写一个Microsoft SQL查询,该查询将按datetime数据类型分组但忽略时间部分,例如小时和分钟?
我在 SQL Server 中有两个日期
@dt1 = 2018-03-15 11:12:10
@dt2 = 2018-03-15 11:12:45
Run Code Online (Sandbox Code Playgroud)
我想要 (@dt1 = @dt2)
这个条件应该是真的。
简而言之,我想忽略秒,只考虑日期和小时和分钟。
我怎样才能在 SQL Server 中做到这一点??
我使用datatime数据类型在数据库中设置日期但它提供了完整的数据时间和小时和分钟我想要设置的日期格式为dd-mm-yyyy
我想从dateTime字段中删除时间戳.
int[] projects = {11157, 11138};
protected void compare(System.Data.DataTable dt1, System.Data.DataTable dt2, int[] arr)
{
differences.Columns.Add("ID", typeof(int));
differences.Columns.Add("BRS Date", typeof(string));
foreach (int value in arr)
{
DataRow[] result = dt1.Select("ChangeRequestNo = '" + arr +"' OR [GPP ID] = '" + arr + "'");
string brs = "";
string srs = "";
if (result.Length > 1)
{
DataRow row1 = result[0];
DataRow row2 = result[1];
DateTime row1date = (DateTime)row1[2];
DateTime row2date = (DateTime)row2[10];
//Remove the Time stamp on the dateTime …Run Code Online (Sandbox Code Playgroud) 我想要获取过去2天的所有记录,但不包括今天的日期.我想获得过去2天内提交日期的名称和位置.为数据类型date_submitted是datetime.
select name, location
from myTable
where date_submitted in (select CAST(FLOOR(CAST(GETDATE() AS FLOAT)) AS DATETIME))
Run Code Online (Sandbox Code Playgroud) sql-server ×10
sql ×9
t-sql ×9
datetime ×5
c# ×2
asp.net-mvc ×1
casting ×1
date ×1
group-by ×1
time ×1