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

Sql server 如何从SQL中的DateTime格式获取时间?,sql-server,tsql,sql-server-2005,datetime,Sql Server,Tsql,Sql Server 2005,Datetime,我只想使用SQL查询从DateTime列获取时间 使用SQLServer2005和2008 默认输出: 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 Server 2008+具有“

我只想使用SQL查询从DateTime列获取时间 使用SQLServer2005和2008 默认输出:

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 Server 2008+具有“时间”数据类型

对于旧版本,不带varchar转换

SELECT 
    ..., DATEADD(dd, DATEDIFF(dd, MyDateTimeCol, 0), MyDateTimeCol)
FROM
   ...
SQL Server 2008:

SELECT cast(AttDate as time) [time]
FROM yourtable
早期版本:

SELECT convert(char(5), AttDate, 108) [time]
FROM yourtable
假设Sql server


选择CONVERT(VARCHAR(8),GETDATE(),108)

从您的表名中选择AttDate,CONVERT(char(5),AttDate,108)[Time],如果您希望以这种样式显示日期:2013年10月23日上午10:30

用这个

SELECT CONVERT(NVARCHAR(30),getdate(), 100)
convert()
方法接受3个参数

  • 数据类型
  • 列/值
  • 样式:可用的样式从100到114。您可以在范围内从中进行选择。逐个选择以更改日期格式
  • 试试这个:

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

    我经常使用此脚本从DateTime获取时间:

    SELECT CONVERT(VARCHAR(9),RIGHT(YOURCOLUMN_DATETIME,9),108) FROM YOURTABLE
    

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

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

    从datetime(无毫秒堆栈)获取时间的最简单方法是:

    SELECT convert(time(0),getDate())
    
    试试这个

    • 日期到时间

      select cast(getdate() as time(0))
      
    • 时间到了

      select cast(orig_time as time(0))
      
    从表名称中选择substr(to_char(列名称,'DD/MM/rrrrr HH:MM:SS'),11,19)

    输出:来自

    05:11:26
    05:11:24
    05:11:24
    
    这将是一个很好的条款。例如:

    (select cast(start_date as time(0))) AS 'START TIME'
    

    试试这个,它会起作用的:

    CONVERT(VARCHAR(8),DATETIME,114)
    
    对于您的。

    获取服务器的日期

    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

    MSSQL2012或更高版本

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

    convert(time(0),dateadd(ms,datediff(ms, [StartDateTime], [StopDateTime]),0) )
    
    SQL Server 2012:

    Select TRY_CONVERT(TIME, myDateTimeColumn) from myTable;
    
    就我个人而言,我更喜欢尝试使用CONVERT()来转换()。主要区别在于:如果强制转换失败,TRY\u CONVERT()返回NULL,而CONVERT()会引发错误。

    您可以使用以下方法:

    SELECT CONVERT(VARCHAR(5), GETDATE(),8)  
    
    输出:

    08:24
    

    在sql中搜索to_char方法。您可以指定格式并获得所需的输出SELECT convert(varchar(10),getdate(),108)。对于sql Server,它可以是
    SELECT convert(varchar(8),getdate(),108)
    为什么不使用此SELECT convert(varchar(8),getdate(),108)作为小时数秒,convert(varchar(8),getdate(),101)AS DateOnly是否存在任何性能问题?@rahularyansharma:如果需要,我不会对日期使用varchar转换。先生,我想知道,如果我们使用此方法而不是您的解决方案,是否会导致性能下降?@rahularyansharma:您可以基于此对任何不遵守的人进行测试,
    0
    表示最小日期
    1900-01-01
    。因此,这将获得列值与0之间的(负)天数,然后将这些负天数添加到列值中,该列值将日期部分“调零”到
    1900-01-01
    ,您只剩下时间。不起作用给出错误
    “to_char”不是可识别的内置函数名。
    它仅在getdate()上起作用当我通过select convert(varchar(8),'2011-02-09 13:09:00',108)时,它产生了日期的前8个字符。如何解决这个问题?为什么我在时间之前得到了9个字符。。结果:晚上9时11分21分
    Select TRY_CONVERT(TIME, myDateTimeColumn) from myTable;
    
    SELECT CONVERT(VARCHAR(5), GETDATE(),8)  
    
    08:24