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

Posted

技术标签:

【中文标题】如何从 SQL 中的 DateTime 格式获取时间?【英文标题】:How to get Time from DateTime format in SQL? 【发布时间】: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) 【参考方案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:你可以根据这个***.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 个参数

    数据类型 列/值 样式:可用样式从 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.

以上是关于如何从 SQL 中的 DateTime 格式获取时间?的主要内容,如果未能解决你的问题,请参考以下文章

如何正确地将日期时间从 c# 传递到 sql?

SQL:如何检查特定的 DateTime

Sql中怎么样获取Datetime中的日

DateTime格式与SQL SERVER 2012中的预期格式不匹配

在sql server2008中的日期类型是啥

使用当前文化定义的 12 或 24 小时格式从 DateTime 获取一天中的小时