2014-12-10 2 views
-1

어떻게 varchar 열을 datetime 필드로 변환 할 수 있습니까? VARCHAR를 필드는 사전에Varchar에서 Datetime으로 변환 - SQL Server

CAST(t_time AS datetime) 

감사를 작동하지 않습니다 아래의 형식 아래

t_time 
------- 
20140314163955 

에서 날짜와 시간을 가지고있다.

+0

시간 부분도 필요합니까? – Raj

답변

2

하나 개의 옵션, 아래와 같은 함수를 사용하는 것입니다 깨끗하게 유지하기 위해 :

CREATE FUNCTION CONVERT_DATETIME_STRING_TO_DATE (@StringDate NVARCHAR(14)) 
RETURNS DATETIME 
AS 
BEGIN 
DECLARE @RESULT DATETIME 

SELECT @RESULT = CONVERT(datetime, substring(@StringDate, 0, 9)) 
SELECT @RESULT = DATEADD(HOUR, CAST(SUBSTRING(@StringDate, 9, 2) AS INT), @RESULT) 
SELECT @RESULT = DATEADD(MINUTE, CAST(SUBSTRING(@StringDate, 11, 2) AS INT), @RESULT) 
SELECT @RESULT = DATEADD(SECOND, CAST(SUBSTRING(@StringDate, 13, 2) AS INT), @RESULT) 

RETURN (@RESULT) 
END 

변환 한 SELECT 문으로 수행 할 수 있지만, 내가 더 나은 것 같아요 시, 분, 초를 추가하는 각 단계를 구분하므로 코드가 명확하고 유지 보수가 쉽습니다.

그런 다음처럼 테이블에서 함수를 호출 :

SELECT CONVERT_DATETIME_STRING_TO_DATE(t_time) 
FROM myTable 

업데이트 :

: 당신이 액세스 할 수있는 경우

하는 경우에만 다음이 같은 것을 사용, SELECT 문을 수행하는

SELECT DATEADD(SECOND, CAST(SUBSTRING(t_time, 13, 2) AS INT), DATEADD(MINUTE, CAST(SUBSTRING(t_time, 11, 2) AS INT), DATEADD(HOUR, CAST(SUBSTRING(t_time, 9, 2) AS INT), CONVERT(DATETIME, substring(t_time, 0, 9))))) 
FROM TABLE 
+0

사용중인 응용 프로그램이 select를 실행하여 테이블에서 행을 검색합니다. 날짜가 위에서 언급 한 형식이기 때문에. 응용 프로그램은 행을 처리하기 위해 varchar를 타임 스탬프로 변환하는 데 필요한 하나의 라이너가 필요했습니다. –

+0

@PottaPitot 그래서? 필자가 예제를 만든 후에 어떻게 함수를 호출 할 수 있는지에 대한 예에서 보았던 것처럼,이 함수를 일반 SELECT 문에서 사용할 수 있습니다. –

+0

문제는 기능을 만들 수 없다는 것입니다. 내가 처분 할 수있는 것은 기존 테이블에서만 읽을 수있는 선택 액세스 권한이며 이러한 열 중 하나에는 위 형식으로 표시된 타임 스탬프가 포함되어 있습니다. –

1

시도해보십시오.

DECLARE @s AS VARCHAR(14) 
DECLARE @dt AS DATETIME 

SET @s = '20140314163955' 
SET @dt = CAST(SUBSTRING(@s, 1,8) as datetime) 

SELECT DATEADD(Second, 
       CAST(Substring(@s, 13,2) AS INT) , 
       DATEADD(minute, 
         CAST(Substring(@s, 11,2) AS INT) , 
         DATEADD(hour, 
           CAST(Substring(@s, 9,2) AS INT), 
           @dt))) AS [DateTime] 
+0

사용중인 응용 프로그램이 select를 실행하여 테이블에서 행을 검색합니다. 날짜가 위에서 언급 한 형식이기 때문에. 응용 프로그램은 행을 처리하기 위해 varchar를 타임 스탬프로 변환하는 데 필요한 하나의 라이너가 필요했습니다. –

관련 문제