2010-05-25 3 views
6

시간의 날짜 값과 두 번째 필드가 하나의 열에서 dB 결과에 IIS 로그를 가져 LOGPARSER를 사용하여 결합하는 :TSQL는 날짜 필드와 시간 필드

2010-05-25 00:00:00.000 

2010-01-01 11:11:58.000 

두 필드를 결합하는 after insert 트리거를 코딩하고 싶습니다.

답변

6

다른 사람이이 스레드에서 넘어 지거나 (원래의 포스터에서이 대답을 사용할 수있는 경우) LogParser의 TO_TIMESTAMP (날짜, 시간) 함수를 살펴보면 날짜 전용 타임 스탬프와 시간을 결합 할 수 있습니다 유일한 타임 스탬프로 전체 타임 스탬프 값을 ... 그리고 db에서 변환하지 않아도됩니다.

18

SQL Server 2008 이상을 사용하는 경우 DATE 및 TIME 데이터 유형에 캐스팅 한 후에 두 값을 더할 수 있습니다. 여기에 예제가 있습니다.

declare @datet datetime; 
set @datet = GETDATE(); 

select 
    @datet, 
    cast(@datet as date), 
    cast(@datet as time); 

select 
    cast(cast(@datet as date) as datetime), 
    cast(cast(@datet as time) as datetime), 
    cast(cast(@datet as date) as datetime) + cast(cast(@datet as time) as datetime); 
+0

데이터 형식의 날짜 및 시간은 문자열에서 위치를 가져 오는 것보다 훨씬 깔끔하게 보입니다. 새로운 08, 당신은 말한다. 그래서 당신은 나를 처음 9 야드있어 - 테이블의 모든 행을 업데이트 할 수 있습니다 - 내가 삽입 된 행을 업데이 트하는 방법 - 최소한 내가 INSX thx – justSteve

+0

대신에 'INSERT BEFORE'를보아야합니다. 수, 트리거를 모두 피하고 계산 된 열 대신 테이블에 다른 열을 그냥 추가하십시오. ALTER TABLE yourtable ADD DateAndTime (cast (@ datat as date) as datetime) + cast (cast (@ datet as time)과 같이 datetime)); –

+0

제 경우에는 정적 인 시간을 보냈고, 시간 부분에서 내부의 캐스트를 피할 수있었습니다. 따라서 datetime + cast ('11 : 59 : 59 PM '은 datetime과 같이) cast (cast (some_date_col as date))는 훌륭하게 작동했으며 좀 더 간결했습니다. – jinglesthula

1

이 시도 :

DECLARE @Date varchar(23) 
     ,@Time varchar(23) 
     ,@Both datetime 

SELECT @Date='2010-05-25 00:00:00.000' 
     ,@Time='2010-01-01 11:11:58.000' 

SELECT @Both=LEFT(@Date,10)+' '+RIGHT(@Time,12) 

SELECT @Both 

출력 : 기반

----------------------- 
2010-05-25 11:11:58.000 

(1 row(s) affected) 

설정 :

DECLARE @INSERTED table(RowID int, DateOf varchar(23), TimeOf varchar(23), DateTimeOf datetime) 

INSERT @INSERTED VALUES (1,'2010-05-25 00:00:00.000','2010-01-01 11:11:58.000',null) 
INSERT @INSERTED VALUES (2,'2010-04-05 00:00:00.000','2010-01-01 12:34:56.789',null) 
INSERT @INSERTED VALUES (3,'2010-03-15 00:00:00.000','2010-01-01 01:01:01.000',null) 


UPDATE @INSERTED 
    SET DateTimeOf=LEFT(DateOf,10)+' '+RIGHT(TimeOf,12) 

SELECT * FROM @INSERTED 

출력 :

RowID DateOf     TimeOf     DateTimeOf 
------- ----------------------- ----------------------- ----------------------- 
1  2010-05-25 00:00:00.000 2010-01-01 11:11:58.000 2010-05-25 11:11:58.000 
2  2010-04-05 00:00:00.000 2010-01-01 12:34:56.789 2010-04-05 12:34:56.790 
3  2010-03-15 00:00:00.000 2010-01-01 01:01:01.000 2010-03-15 01:01:01.000 

(3 row(s) affected) 
0

출력을 새 열에 추가 할 수있는 경우 해당 새 열을 다음과 같이 만들 수도 있습니다. 계산 된 열을 정의하고이를 두 개의 열을 결합하도록 정의합니다 (디자인 타임에).

Dev

관련 문제