Bri*_*ins 26 sql t-sql database sql-server sql-server-2005
当我从SQL Server中选择时,我希望得到一个日期,但是省略毫秒值,我希望它是一个日期类型.所以如果我有一个值1/1/2009 1:23:11.923
,我想省略毫秒但保留日期类型,这样它就是值1/1/2009 1:23:11.000
(我知道你真的不能省略带有日期的毫秒值,只想让它为零).
SQL Server中是否有一个函数可以执行此操作?或者我必须编写自己的功能?同样,我不希望它作为一种varchar
类型,而是一种datetime
类型.
Pet*_*hia 53
使用DATETIME2
,SQL Server 2008中支持小数精度的新数据类型:
SELECT
CONVERT(DATETIME2(0),SYSDATETIME()) [yyyy-mm-dd hh:mm:ss]
, CONVERT(DATETIME2(1),SYSDATETIME()) [yyyy-mm-dd hh:mm:ss.f]
, CONVERT(DATETIME2(2),SYSDATETIME()) [yyyy-mm-dd hh:mm:ss.ff]
, CONVERT(DATETIME2(3),SYSDATETIME()) [yyyy-mm-dd hh:mm:ss.fff]
, CONVERT(DATETIME2(4),SYSDATETIME()) [yyyy-mm-dd hh:mm:ss.ffff]
, CONVERT(DATETIME2(5),SYSDATETIME()) [yyyy-mm-dd hh:mm:ss.fffff]
, CONVERT(DATETIME2(6),SYSDATETIME()) [yyyy-mm-dd hh:mm:ss.ffffff]
, CONVERT(DATETIME2(7),SYSDATETIME()) [yyyy-mm-dd hh:mm:ss.fffffff]
Run Code Online (Sandbox Code Playgroud)
转换将舍入到最近的单位,例如:
2014-09-04 09:35:47.0162993 as DATETIME2(4) ->
2014-09-04 09:35:47.0163
Run Code Online (Sandbox Code Playgroud)
或者,在SQL 2005和eariler上:
SELECT
original = GETDATE()
, [floor] = DATEADD(ms,-DATEPART(ms,GETDATE()),GETDATE())
, [ceiling] = DATEADD(ms,1000-DATEPART(ms,GETDATE()),GETDATE())
, [rounded] = DATEADD(ms,CASE WHEN DATEPART(ms,GETDATE()) < 500 THEN 0 ELSE 1000 END-DATEPART(ms,GETDATE()),GETDATE())
Run Code Online (Sandbox Code Playgroud)
这比转换为字符串表示和从字符串表示转换要快一些.
OMG*_*ies 11
使用:
SELECT CONVERT(DATETIME, CONVERT(VARCHAR(19), GETDATE(), 120))
Run Code Online (Sandbox Code Playgroud)
这个:
CONVERT(VARCHAR(19), GETDATE(), 120)
Run Code Online (Sandbox Code Playgroud)
...省略毫秒,返回VARCHAR.因此,您可以将其CAST/CONVERT到DATETIME中,以便使用所需的数据类型.
如果您不想使用字符串转换,这是一个解决方案:
DECLARE @TheDate datetime, @Today datetime
SET @TheDate = GetDate()
SET @Today = DateAdd(dd, DateDiff(dd, 0, @TheDate), 0)
SELECT DateAdd(s, DateDiff(s, @Today, @TheDate), @Today)
Run Code Online (Sandbox Code Playgroud)
试试这个
declare @DATE datetime
select @DATE = '1/1/2009 1:23:11.923'
SELECT convert(datetime,CONVERT(char(35),@DATE,120))
Run Code Online (Sandbox Code Playgroud)
或仅限日期功能
DECLARE @DATE DATETIME
SELECT @DATE = '1/1/2009 1:23:11.923'
SELECT DATEADD(SECOND, DATEDIFF(SECOND, 39000, @DATE), 39000)
Run Code Online (Sandbox Code Playgroud)