我有一个sql DateTime
(ms sql server),想要在没有秒的情况下提取相同的日期:
例如2011-11-22 12:14:58.000
成为:2011-11-22 12:14:00.000
我该怎么做?我正在考虑将DATEADD
与DATEPART
结合使用,但似乎非常容易出错(除了性能问题)
答案 0 :(得分:46)
SELECT DATEADD(MINUTE, DATEDIFF(MINUTE, 0, yourcolumn), 0) FROM yourtable
如果您不希望数据类型之间转换缓慢,这将是有效的。
答案 1 :(得分:22)
试试这个:
SELECT CAST(CONVERT(CHAR(16), '2011-11-22 12:14',113) AS datetime)
答案 2 :(得分:2)
日期和时间需要仔细,不要转换为TEXT。
我的个人解决方案:
CREATE FUNCTION [dbo].[fnDateTimeTruncated]
(
@datetime DATETIME
)
RETURNS DATETIME
AS
BEGIN
RETURN DATETIMEFROMPARTS ( year(@datetime), month(@datetime), day(@datetime), DATEPART(hh,@datetime), DATEPART(mi,@datetime), 0, 0)
END
编辑:
关于http://blog.waynesheffield.com/wayne/archive/2012/03/truncate-a-date-time-to-different-part/,DateAdd具有更好的性能。 感谢t-clausen.dk
答案 3 :(得分:1)
DECLARE @TheDate DATETIME
SET @TheDate = '2011-11-22 12:14:58.000'
DATEADD(mi, DATEDIFF(mi, 0, @TheDate), 0)
在查询中
/* ...all records in that minute; index-friendly expression */
WHERE TheDate BETWEEN DATEADD(mi, DATEDIFF(mi, 0, @TheDate), 0)
AND DATEADD(mi, DATEDIFF(mi, 0, @TheDate) + 1, 0)
答案 4 :(得分:1)
如果没有毫秒,那么
DECLARE @dt datetime2 = '2011-11-22 12:14:58.000';
DECLARE @goalDt datetime2 = DATEADD(second,-DATEPART(second,@dt), @dt);
要删除毫秒部分,请添加
SET @goalDt = DATEADD(millisecond,-DATEPART(millisecond,@goalDt ), goalDt dt);
答案 5 :(得分:1)
稍微摆弄一下,这似乎运作良好:
SELECT CAST(CONVERT(CHAR(17), bl.[time],113) AS varchar(17))
结果:2011-11-22 12:14
我在查询中使用它作为选择列表的一部分的确切方式:
,CAST(CONVERT(CHAR(17), bl.[time],113) AS varchar(17))
+ ' (UTC +0)' AS [TIME]
给我结果:2017年12月15日06:43(UTC + 0)
答案 6 :(得分:1)
在SQL Server 2014中,您可以为此使用“格式”功能。
例如。
declare @Startdate datetime = '2020-11-07 15:27:50.713'
set @Startdate = Convert(datetime,FORMAT(@Startdate, 'yyyy-MM-dd HH:mm'))
> Result is
2020-11-07 15:27:00.000
答案 7 :(得分:0)
四舍五入:
{
"NotebookApp": {
"nbserver_extensions": {
}
},
"KernelSpecManager": {}
}
要截断:
DECLARE @TheDate DATETIME
SET @TheDate = '2019-1-2 12:14:58.400'
SELECT CAST(@TheDate AS SMALLDATETIME)