Tsql 如何格式化日期时间

Tsql 如何格式化日期时间,tsql,Tsql,在sql server中,如何获取当前日期但时间为上午12:00。 使用GETDATE()可以获取当前日期和时间。我需要将datetime格式化为以下格式: 2011-02-04 12:00 AM或2011-02-04 00:01查看T-SQL中的函数-它们允许您以各种方式格式化日期时间值。查看T-SQL中的函数-它们允许您以各种方式格式化日期时间值。您首先需要知道如何获得所需的时间。它被称为“地板”日期时间。请参见此示例: --Floor a datetime SELECT '0 None'

在sql server中,如何获取当前日期但时间为上午12:00。 使用GETDATE()可以获取当前日期和时间。我需要将datetime格式化为以下格式:


2011-02-04 12:00 AM或2011-02-04 00:01查看T-SQL中的函数-它们允许您以各种方式格式化日期时间值。

查看T-SQL中的函数-它们允许您以各种方式格式化日期时间值。

您首先需要知道如何获得所需的时间。它被称为“地板”日期时间。请参见此示例:

--Floor a datetime

SELECT '0 None',  GETDATE()                                                                   -- none    2008-09-17 12:56:53.430
UNION SELECT '1 Second',DATEADD(second,DATEDIFF(second,'2000-01-01',GETDATE()),'2000-01-01')  -- Second: 2008-09-17 12:56:53.000
UNION SELECT '2 Minute',DATEADD(minute,DATEDIFF(minute,0,GETDATE()),0)                        -- Minute: 2008-09-17 12:56:00.000
UNION SELECT '3 Hour',  DATEADD(hour,DATEDIFF(hour,0,GETDATE()),0)                            -- Hour:   2008-09-17 12:00:00.000
UNION SELECT '4 Day',   DATEADD(day,DATEDIFF(day,0,GETDATE()),0)                              -- Day:    2008-09-17 00:00:00.000
UNION SELECT '5 Month', DATEADD(month,DATEDIFF(month,0,GETDATE()),0)                          -- Month:  2008-09-01 00:00:00.000
UNION SELECT '6 Year',  DATEADD(year,DATEDIFF(year,0,GETDATE()),0)                            -- Year:   2008-01-01 00:00:00.000
ORDER BY 1
PRINT' '
PRINT 'Note that when you are flooring by the second, you will often get an arithmetic overflow if you use 0. So pick a known value that is guaranteed to be lower than the datetime you are attempting to floor'
PRINT 'this always uses a date less than the given date, so there will be no arithmetic overflow'
SELECT '1 Second',DATEADD(second,DATEDIFF(second,DATEADD(day,DATEDIFF(day,0,GETDATE()),0)-1,GETDATE()),DATEADD(day,DATEDIFF(day,0,GETDATE()),0)-1)  -- Second: 2008-09-17 12:56:53.000
完成地板铺设后,使用CONVERT()的其中一种风格按照您的需要对其进行格式化:

这是您想要的格式,但不更改时间:

select CONVERT(char(10), GETDATE(), 121)+' '+LTRIM(RIGHT(CONVERT(varchar(30), GETDATE(), 100),7))
输出:

------------------
2011-02-04 7:19AM
------------------
2011-02-04 12:00AM
要格式化并设置所需时间,请执行以下操作:

select CONVERT(char(10),DATEADD(day,DATEDIFF(day,0,GETDATE()),0), 121)+' '+LTRIM(RIGHT(CONVERT(varchar(30), DATEADD(day,DATEDIFF(day,0,GETDATE()),0), 100),7))
输出:

------------------
2011-02-04 7:19AM
------------------
2011-02-04 12:00AM

你首先需要知道如何得到你想要的时间。它被称为“地板”日期时间。请参见此示例:

--Floor a datetime

SELECT '0 None',  GETDATE()                                                                   -- none    2008-09-17 12:56:53.430
UNION SELECT '1 Second',DATEADD(second,DATEDIFF(second,'2000-01-01',GETDATE()),'2000-01-01')  -- Second: 2008-09-17 12:56:53.000
UNION SELECT '2 Minute',DATEADD(minute,DATEDIFF(minute,0,GETDATE()),0)                        -- Minute: 2008-09-17 12:56:00.000
UNION SELECT '3 Hour',  DATEADD(hour,DATEDIFF(hour,0,GETDATE()),0)                            -- Hour:   2008-09-17 12:00:00.000
UNION SELECT '4 Day',   DATEADD(day,DATEDIFF(day,0,GETDATE()),0)                              -- Day:    2008-09-17 00:00:00.000
UNION SELECT '5 Month', DATEADD(month,DATEDIFF(month,0,GETDATE()),0)                          -- Month:  2008-09-01 00:00:00.000
UNION SELECT '6 Year',  DATEADD(year,DATEDIFF(year,0,GETDATE()),0)                            -- Year:   2008-01-01 00:00:00.000
ORDER BY 1
PRINT' '
PRINT 'Note that when you are flooring by the second, you will often get an arithmetic overflow if you use 0. So pick a known value that is guaranteed to be lower than the datetime you are attempting to floor'
PRINT 'this always uses a date less than the given date, so there will be no arithmetic overflow'
SELECT '1 Second',DATEADD(second,DATEDIFF(second,DATEADD(day,DATEDIFF(day,0,GETDATE()),0)-1,GETDATE()),DATEADD(day,DATEDIFF(day,0,GETDATE()),0)-1)  -- Second: 2008-09-17 12:56:53.000
完成地板铺设后,使用CONVERT()的其中一种风格按照您的需要对其进行格式化:

这是您想要的格式,但不更改时间:

select CONVERT(char(10), GETDATE(), 121)+' '+LTRIM(RIGHT(CONVERT(varchar(30), GETDATE(), 100),7))
输出:

------------------
2011-02-04 7:19AM
------------------
2011-02-04 12:00AM
要格式化并设置所需时间,请执行以下操作:

select CONVERT(char(10),DATEADD(day,DATEDIFF(day,0,GETDATE()),0), 121)+' '+LTRIM(RIGHT(CONVERT(varchar(30), DATEADD(day,DATEDIFF(day,0,GETDATE()),0), 100),7))
输出:

------------------
2011-02-04 7:19AM
------------------
2011-02-04 12:00AM

SQL Server中有许多日期函数可供使用-请参阅


希望这些会有帮助

SQL Server中有许多日期函数可供使用-请参阅


希望这些会有帮助

要简单地将时间设置为12:00 AM,但保持datetime数据类型,请尝试:

SELECT DATEADD(DAY,0,DATEDIFF(DAY,0,GETDATE()))

要简单地将时间设置为12:00 AM,但保持datetime数据类型,请尝试:

SELECT DATEADD(DAY,0,DATEDIFF(DAY,0,GETDATE()))

您还可以使用一些简单的方法,如
selectconvert(char(10),GETDATE(),121)+'00:01'
您还可以使用一些简单的方法,如
selectconvert(char(10),GETDATE(),121)+'00:01'