如何从SQL中的DateTime格式获取时间?


180

我想使用SQL Server 2005和2008默认输出使用SQL查询从DateTime列中仅获取时间:

AttDate                   
==
2011-02-09 13:09:00    
2011-02-09 14:10:00    

我想要这个输出:

AttDate                Time 
==
2011-02-09 13:09:00    13:09
2011-02-09 14:10:00    14:10

在sql中搜索to_char方法。您可以指定格式,并得到所需的输出
纳文巴布

1
选择convert(varchar(10),getdate(),108)
rahularyansharma

它可能SELECT CONVERT(VARCHAR(8),GETDATE(),108)适用于sql server
V4Vendetta 2011年

Answers:


340

SQL Server 2008:

SELECT cast(AttDate as time) [time]
FROM yourtable

早期版本:

SELECT convert(char(5), AttDate, 108) [time]
FROM yourtable

34

假设Sql服务器

SELECT CONVERT(VARCHAR(8),GETDATE(),108)


它仅在getdate()上起作用,就像我通过select convert(varchar(8),'2011-02-09 13:09:00',108)一样,它会从日期生成前8个字符。如何解决此问题?
阿帕纳

24

SQL Server 2008+具有“时间”数据类型

SELECT 
    ..., CAST(MyDateTimeCol AS time)
FROM
   ...

对于较旧的版本,不进行 varchar转换

SELECT 
    ..., DATEADD(dd, DATEDIFF(dd, MyDateTimeCol, 0), MyDateTimeCol)
FROM
   ...

为什么不使用此SELECT CONVERT(VARCHAR(8),GETDATE(),108)AS HourMinuteSecond,CONVERT(VARCHAR(8),GETDATE(),101)AS DateOnly是否存在任何性能问题?
rahularyansharma 2011年

2
@rahularyansharma:如果需要的话我不使用VARCHAR转换的日期
GBN

先生,我想知道如果使用此方法而不是您的解决方案,性能会降低吗?
rahularyansharma 2011年

1
@rahularyansharma:您可以在此基础上测试自己stackoverflow.com/questions/133081/...
GBN

1
对于未关注的任何人,0代表最短日期1900-01-01。因此,这将获得列值和0之间的(负)天数,然后将那些负数天添加到列值中,从而将日期部分“归零”,1900-01-01而您只剩下时间。
xr280xr 2015年

13

从日期时间获取时间而没有毫秒堆栈的最简单方法是:

SELECT convert(time(0),getDate())

10

试试这个

  • 日期到时间

    select cast(getdate() as time(0))
  • 上班时间

    select cast(orig_time as time(0))

5

试试这个:

select  convert(nvarchar,CAST(getdate()as time),100)





2

要从日期时间获取时间,我们可以使用

SELECT CONVERT(VARCHAR(20), GETDATE(), 114)

2

如果您想以这种风格约会:2013年10月23日,上午10:30

用这个

SELECT CONVERT(NVARCHAR(30),getdate(), 100)

convert() 方法需要3个参数

  1. 数据类型
  2. 列/值
  3. 样式:可用样式为100到114。您可以在范围内选择。逐一选择更改日期格式。

2

获取服务器日期

SELECT LTRIM(RIGHT(CONVERT(VARCHAR(20), GETDATE(), 100), 7)) FROM TABLENAME WHERE ...

要么

如果存储在表中

SELECT LTRIM(RIGHT(CONVERT(VARCHAR(20), datename, 100), 7)) FROM TABLENAME WHERE ...

结果:

上午11:41



1

在MSSQL2012或更高版本上

cast(dateadd(ms,datediff(ms, [StartDateTime], [StopDateTime]),0) as Time(0))

...要么...

convert(time(0),dateadd(ms,datediff(ms, [StartDateTime], [StopDateTime]),0) )

1

SQL Server 2012:

Select TRY_CONVERT(TIME, myDateTimeColumn) from myTable;

就个人而言,我更喜欢TRY_CONVERT()比CONVERT()。主要区别在于:如果强制转换失败,则TRY_CONVERT()返回NULL,而CONVERT()引发错误。


-1

select substr(to_char(colUmn_name, 'DD/MM/RRRR HH:MM:SS'),11,19) from table_name;

输出:从

05:11:26
05:11:24
05:11:24

不起作用给出了错误'to_char' is not a recognized built-in function name.
captainsac
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.