如何从 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 格式获取时间?的主要内容,如果未能解决你的问题,请参考以下文章