2010-02-18 3 views

답변

0

흥미롭게 SQLCLR 기능을 사용할 수있는 경우의 예입니다 찾을 수 있습니다, 할, 당신은을받지 않습니다 전의 DateTime 값이 .000, .003 또는 .007 단위로 반올림되므로 원하는 정밀도를 지정하십시오. 따라서 51.234는 51.233이됩니다. 그러나 DateTime2를 사용하면 원하는 정밀도를 얻을 수 있습니다.

declare @x varchar(50) 
set @x='20100218000051234' 
Select DateAdd(ms, Cast(Substring(@x, 9, 9) As int), Cast(Substring(@x, 1, 8) As datetime)) 
Select DateAdd(ms, Cast(Substring(@x, 9, 9) As int), Cast(Substring(@x, 1, 8) As datetime2)) 

Results: 
2010-02-18 00:00:51.233 
2010-02-18 00:00:51.2340000 
6

이 시도 :

declare @x varchar(50) 
set @x='20100218000051234' 
select DATEADD(ms,CONVERT(int,RIGHT(@x,9)),CONVERT(datetime,LEFT(@x,8))) 

출력 위의 예에서

----------------------- 
2010-02-18 00:00:51.233 

(1 row(s) affected) 
2

, 20100218000051234이

Year: 2010 
Month: 02 (February 
Day: 18 
Milliseconds: 000051234 

또는를 나타내는 지 여부를 명확하지 않다 :

012 3,516,
Year: 2010 
Month: 02 (February 
Day: 18 
Hours: 00 
Minutes: 00 
Seconds: 51 
Milliseconds: 234 
+2

질문 제목이 ** yyyymmddMilliseconds ** 형식을 지정하지 않으십니까? –

+0

KM : 맞습니다. 마지막 9 문자가 "밀리 초"를 나타내지 만 비정상적인 형식 문자열로 보였으므로 두 번 확인하는 것이 가장 좋습니다 –

0

당신은 SUBSTRINGCAST를 사용해야합니다.

SELECT CAST(
     SUBSTRING(dateString, 1, 4) + '-' + 
     SUBSTRING(dateString, 5, 2) + '-' + 
     SUBSTRING(dateString, 7, 2) 
     AS date) 

당신은 값으로 재생 시간에 대한 정보를 추가해야하지만 완성 된 제품은 다음과 같이한다 : 당신은 또한 다른 여러 경우 (다른 방법으로

SELECT CAST('1998-02-23 14:23:05' AS date) 
0

유용 "구문 분석 정보는"당신이 당신이 SQL Server 2005 및 이전을 사용하는 경우,

using System; 
using System.Data.SqlTypes; 
using System.Globalization; 

public partial class UserDefinedFunctions 
{ 
    [Microsoft.SqlServer.Server.SqlFunction] 
    public static SqlDateTime Parse(SqlString s) 
    { 
     if (s.IsNull) 
     return SqlDateTime.Null; 

     return new SqlDateTime(DateTime.ParseExact(s.Value,"yyyyMMddhhmmssfff",CultureInfo.InvariantCulture)); 
    } 
}; 
관련 문제