2010-11-09 98 views
2

我有SQL Server 2005,所有日期都使用DATETIME列类型进行存储。前端应用程序以“yyyyMMdd hhmmss”格式处理日期。我正在写一组SQL查询和存储过程,并想知道是否有一种简单的方法将此格式转换为标准的SQL DATETIME。我没有对前端应用程序进行编码,因此我无法对其进行任何更改。SQL Server字符串解析

我已经看过CONVERT(),但没有一个类型代码匹配我想要的。最近的一个是

CONVERT(DATETIME, '20101017' 112) 

但是,它没有输入的时间部分。有任何想法吗?或者我必须编写一个SQL函数来执行解析和转换。

谢谢

回答

3

如果插入冒号进入你的时间适当的地方,你可以使用样式120

declare @d varchar(15) 
set @d = '20101017 111428' 

select CONVERT(DATETIME, stuff(stuff(@d,12,0,':'),15,0,':'), 120) 
+0

+1:比我的简单得多 – RedFilter 2010-11-09 19:42:03

1

您可能会发现this页面是有用的(如果你能得到过去的精神病诱导配色方案)。

+0

由于该网页确实包含了很多的例子确实。看来,我将不得不使用字符串函数来子字符串和/或插入“ - ”和“:”。 – 2010-11-09 17:23:42

+0

@ del.ave:是的,它看起来非常强大(并且格式化让人眼花缭乱!)。 – 2010-11-09 18:30:54

1

如何:

declare @s as varchar(25) 
set @s = '20101109 172054' 
select @s, convert(datetime, SUBSTRING(@s, 1, 4) + '-' + SUBSTRING(@s, 5, 2) 
    + '-' + SUBSTRING(@s, 7, 3) + SUBSTRING(@s, 10, 2) + ':' 
    + SUBSTRING(@s, 12, 2) + ':' + SUBSTRING(@s, 14, 2), 20)