将SQL Server中的日期时间格式从yyyy-mm-dd hh:mi:ss转换为yyyy-mm-dd 23:59:59

3

你好,我想要将日期时间转换为以下格式:2015-05-12 23:59:59。其中小时和秒应该像这样显示:12:59:59

例如:我想要将今天的日期转换为以下格式:2015-08-17 23:59:59

编辑后:

对于在SQL Server中使用GETDATE()获取的日期时间,它会显示如下格式:2015-08-17 17:10:54.080 ,我想将其转换为2015-08-17 23:59:59.080。


你所说的将2015-08-17 17:10:54.080转换为2015-08-17 23:59:59.080是什么意思?这里的时间不同。这也与您请求不同格式的标题发生冲突。 - t-clausen.dk
嗨,我更新了我的头文件。对于混淆@t-clausen.dk感到抱歉。 - Ramasamy Kanna
2
几乎总是解决了错误的问题。在处理连续数据时,使用半开区间(包含起始点,不包含结束点)几乎总是更好的选择。计算“明天开始的午夜”而不是“今天最后一刻”是微不足道的,如果您稍后更改数据类型,则后者不需要更改(例如,在使用datetime2时,一天的最后一刻取决于精度,而且没有一个与datetime相同)。 - Damien_The_Unbeliever
4个回答

4

似乎这个问题与格式无关。因此,以下是一种获取每天最后时间戳的解决方案:

要获取当天的最后一分钟:

SELECT dateadd(d, datediff(d, 0, getdate()), cast('23:59:59' as datetime))

返回:

2015-08-17 23:59:59.000

获取当天的最后一个时间戳:
SELECT dateadd(d, datediff(d, 0, getdate()), cast('23:59:59:997' as datetime))
2015-08-17 23:59:59.997

1
在这里,你需要使用 convert(),尝试以下查询。
SELECT CONVERT(char(19), GetDate(),121)

Output :

2015-08-17 11:37:29

难道不应该使用 CHAR(19) 来消除最后的 . 吗? - M.Ali
使用120代替121,问题就解决了,毫秒不是必需的。 - Arunprasanth K V
@ArunprasanthKV已经解决了,您能否尝试这个查询?我认为它没有提到显示毫秒。 - Chiragkumar Thakar
是的,我明白了。我的意思是你可以使用120而不是121,因为121会返回毫秒,而120仅返回hh:mm:ss。 - Arunprasanth K V
@t-clausen.dk 感谢您的澄清,我已经删除了那条评论。 - Arunprasanth K V
@t-clausen.dk 但我仍然困惑于如何将2015-08-17 17:10:54.080转换为2015-08-17 23:59:59.080? - Arunprasanth K V

1
你可以使用CASTTIME(0)转换为以下格式的时间: HH:mm:ss
SELECT CAST('2015-08-17 12:59:59' AS TIME(0))

输出

12:59:59

更正

之前误解了您的问题,所以提供了如何仅获取时间的方法,对于以下格式的日期+时间:yyyy-MM-dd HH:mm:ss,您可以使用以下方法:

SELECT CONVERT(CHAR(19), '2015-08-17 12:59:59.154', 20)

OUTPUT

2015-08-17 12:59:59

1

SQL Server 2005及以后版本

SELECT CONVERT(VARCHAR(19), GETDATE(), 120) 

SQL Server 2012及更高版本。
SELECT FORMAT(GETDATE() , 'yyyy-MM-dd HH:mm:ss')

任何一个都会返回:

2015-08-17 12:42:25

真的要对这个答案点踩吗???您能否留下评论,我也许可以改进我的回答呢? - M.Ali

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接