2015-07-13 116 views
1

我必须开发系统,它是从另一个系统接受数据(在数据库中)。我面对的问题是所有日期和时间数据在NVARCHAR。我必须转换为DATETIME以计算持续时间。我正在使用SQL Server 2008 R2。nvarchar到时间转换

数据例如:

STR_YMD  STR_HMS 
-------------------- 
20150101 151000 
20090807 123009 
20130113 145602 
20090515 061700 

我怎么能转换该数据为以下DATETIME数据?

STR_DT 
-------------------- 
2015-01-01 15:10:00 
2009-08-07 12:30:09 
2013-01-13 14:56:02 
2009-05-15 06:17:00 

希望有人能帮助我。在此先感谢

Bet

+0

你有没有看着https://msdn.microsoft.com/en-us/library/ xhz1w05e(v = vs.110).aspx? –

回答

1

这样的事情?

SELECT CAST(SUBSTRING(STR_YMD, 1, 4) + '/' + SUBSTRING(STR_YMD, 5, 2) + '/' + 
SUBSTRING(STR_YMD, 7, 2) + ' ' + SUBSTRING(STR_HMS, 1, 2) + ':' + 
SUBSTRING(STR_HMS, 3, 2) + ':' + SUBSTRING(STR_HMS, 5, 2) AS DateTime) 

编辑:可以使用LEFT功能是短时间格式兼容:

SELECT CAST(SUBSTRING(STR_YMD, 1, 4) + '/' + SUBSTRING(STR_YMD, 5, 2) + '/' + 
SUBSTRING(STR_YMD, 7, 2) + ' ' + SUBSTRING(LEFT(STR_HMS+'000000', 6), 1, 2) + ':' + 
SUBSTRING(LEFT(STR_HMS+'000000', 6), 3, 2) + ':' + 
SUBSTRING(LEFT(STR_HMS+'000000', 6), 5, 2) AS DateTime) 
+0

这是可能的,但STR_HMS的长度可能是多种多样的,所以我必须检查所有变体。例如1750.我认为我可以使用一些转换功能。不管怎么说,还是要谢谢你。 – Bet

+0

@Bet看我的编辑。 – stephanejulien

+0

Hi @Bet如果此答案已解决您的问题,请点击复选标记,考虑[接受它](http://meta.stackexchange.com/q/5234/179419)。这向更广泛的社区表明,您已经找到了解决方案,并为答复者和您自己提供了一些声誉。没有义务这样做。 – stephanejulien