【问题标题】:How to get Time from DateTime format in SQL?如何从 SQL 中的 DateTime 格式获取时间?
【发布时间】:2011-10-10 08:52:22
【问题描述】:

我只想使用 SQL 查询从 DateTime 列中获取时间 使用 SQL Server 2005 和 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中搜索to_char方法。您可以指定格式并获得所需的输出
  • 选择转换(varchar(10), getdate(), 108)
  • sql server 可能是SELECT CONVERT(VARCHAR(8),GETDATE(),108)

标签: sql-server tsql sql-server-2005 datetime


【解决方案1】:

SQL Server 2008:

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

早期版本:

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

【讨论】:

    【解决方案2】:

    假设Sql server

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

    【讨论】:

    • 它仅适用于 getdate() 当我通过 select convert(varchar(8),'2011-02-09 13:09:00',108) 它产生前 8 个字符从日期开始。如何解决这个问题?
    【解决方案3】:

    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:如果需要,我不会对日期使用 varchar 转换
    • 先生,我想知道如果我们使用它而不是您的解决方案,性能是否会下降?
    • @rahularyansharma:你可以根据这个stackoverflow.com/questions/133081/…来测试自己
    • 对于没有关注的人,0 代表最小日期1900-01-01。因此,这将获取列值和 0 之间的(负)天数,然后将这些负天数添加到列值中,将日期部分“归零”到 1900-01-01,你只剩下时间了。跨度>
    【解决方案4】:

    在没有毫秒堆栈的情况下从 datetime 获取时间的最简单方法是:

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

    【讨论】:

      【解决方案5】:

      试试这个

      • 日期时间

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

        select cast(orig_time as time(0))
        

      【讨论】:

        【解决方案6】:

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

        CONVERT(VARCHAR(8),DATETIME,114)
        

        为了你的reference

        【讨论】:

          【解决方案7】:

          试试这个:

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

          【讨论】:

            【解决方案8】:

            获取服务器日期

            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

            【讨论】:

              【解决方案9】:

              select AttDate,convert(char(5), AttDate, 108) [Time] from yourTableName

              【讨论】:

                【解决方案10】:
                select cast (as time(0))
                

                将是一个很好的条款。例如:

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

                【讨论】:

                  【解决方案11】:

                  我经常使用这个脚本从 DateTime 中获取时间:

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

                  【讨论】:

                  • 为什么我在时间前面得到9..结果:9 11:21PM
                  【解决方案12】:

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

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

                  【讨论】:

                    【解决方案13】:

                    如果你想以这种方式约会:2013 年 10 月 23 日上午 10:30

                    使用这个

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

                    convert() 方法需要 3 个参数

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

                    【讨论】:

                      【解决方案14】:

                      MSSQL2012 或更高版本

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

                      ...或...

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

                      【讨论】:

                        【解决方案15】:

                        SQL Server 2012:

                        Select TRY_CONVERT(TIME, myDateTimeColumn) from myTable;
                        

                        就个人而言,我更喜欢 TRY_CONVERT() 而不是 CONVERT()。主要区别:如果转换失败,TRY_CONVERT() 会返回 NULL,而 CONVERT() 会引发错误。

                        【讨论】:

                          【解决方案16】:
                          select convert(char(5), tbl_CustomerBooking.CheckInTime, 108) AS [time]
                          from tbl_CustomerBooking
                          

                          【讨论】:

                            【解决方案17】:

                            你可以用这个:

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

                            输出:

                            08:24
                            

                            【讨论】:

                              【解决方案18】:

                              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.
                              猜你喜欢
                              • 2023-03-16
                              • 2015-05-21
                              • 1970-01-01
                              • 1970-01-01
                              • 1970-01-01
                              • 1970-01-01
                              • 1970-01-01
                              • 1970-01-01
                              • 2021-10-21
                              相关资源
                              最近更新 更多