Sql 将带有日期和时间的字符串转换为hh:mm

Sql 将带有日期和时间的字符串转换为hh:mm,sql,datetime,Sql,Datetime,我的表中有一个带有日期和时间的字符串字段。像这样 20131001094049 现在,我必须在09:40的时候把这段时间分秒必争 我怎样才能轻松地得到它呢?根据您的字符串,我假设格式是YYYYMMDDHHMMSS(年、月、日、时、分、秒)。此解决方案适用于SQL Server 考虑到你可以用可怜的人修复字符串操作 SELECT LEFT(RIGHT(20131001094049, 6 ) , 2) + ':' + RIGHT(LEFT(RIGHT(20131001094049

我的表中有一个带有日期和时间的字符串字段。像这样

20131001094049

现在,我必须在09:40的时候把这段时间分秒必争


我怎样才能轻松地得到它呢?

根据您的字符串,我假设格式是
YYYYMMDDHHMMSS
(年、月、日、时、分、秒)。此解决方案适用于
SQL Server

考虑到你可以用可怜的人修复字符串操作

SELECT 
    LEFT(RIGHT(20131001094049, 6 ) , 2) + ':' + 
    RIGHT(LEFT(RIGHT(20131001094049, 6 ) , 4),2)
返回
09:40


发生的情况是,它取原始日期,即20131001094049,取右边的六个字符
094049
,然后取左边的两个
09
。然后它将其连接到一个
,然后将结果字符串连接到假定的
MM
(分钟)部分的
04

我将根据您的字符串假定格式为
YYYYMMDDHHMMSS
(年、月、日、小时、分钟、秒)。此解决方案适用于
SQL Server

考虑到你可以用可怜的人修复字符串操作

SELECT 
    LEFT(RIGHT(20131001094049, 6 ) , 2) + ':' + 
    RIGHT(LEFT(RIGHT(20131001094049, 6 ) , 4),2)
返回
09:40


发生的情况是,它取原始日期,即20131001094049,取右边的六个字符
094049
,然后取左边的两个
09
。然后将其连接到一个
,然后将生成的字符串连接到假定的
MM
(分钟)部分的
04

因为您的日期和时间信息不是以标准的日期时间格式存储的,因此您需要依赖字符串操作,即:

    SELECT SUBSTRING('20131001094049', 9, 2) + ':' + 
           SUBSTRING('20131001094049', 11, 2)
要返回完整的日期时间类型,您可以操作整个字符串并使用
FORMAT
函数(在SQL Server 2012或更高版本中提供):


两者都将返回
09:40

,因为您的日期和时间信息不是以标准的日期时间格式存储的,因此您需要依赖字符串操作,即:

    SELECT SUBSTRING('20131001094049', 9, 2) + ':' + 
           SUBSTRING('20131001094049', 11, 2)
要返回完整的日期时间类型,您可以操作整个字符串并使用
FORMAT
函数(在SQL Server 2012或更高版本中提供):


两者都将返回
09:40

我想象这个字符串的中断是
YYYY:MM:DD:HH:MM:SS
?在不同DBMSI中实现不同时,您的DBMS是什么?我想象这个字符串的中断是
YYYY:MM:DD:HH:MM:SS
?在不同DBMSI中实现不同时,您的DBMS是什么因为它需要更少的计算。我曾希望TSQL有一个函数可以将不分隔的日期时间转换为适当的格式,但遗憾的是,唯一的解决方案是使用第二个。我也喜欢使用子字符串。。更容易理解。你赢了我!同意,作为
SELECT
语句的一部分,第一个选项更简单。如果我将此作为过程的一部分编写,尽管我可能会使用第二个选项,特别是如果我想不止一次使用这些值。@logixologist Yes‘SUBSTRING’是我的首选选项:)我觉得第一个方法是最好的方法,因为它需要更少的计算。我曾希望TSQL有一个函数可以将不分隔的日期时间转换为适当的格式,但遗憾的是,唯一的解决方案是使用第二个。我也喜欢使用子字符串。。更容易理解。你赢了我!同意,作为
SELECT
语句的一部分,第一个选项更简单。如果我将此作为过程的一部分编写,尽管我可能会使用第二个选项,尤其是如果我想多次使用这些值的话。@logixologist Yes“SUBSTRING”是我的首选选项:)