2010-05-25 23 views
6

kez tarih değerini ve ikinci bir alana sahip bir sütunda bir db sonuçlarına IIS günlükleri almak için LOGPARSER kullanma birleştirmek:TSQL tarih alanı ve bir zaman alan

2010-05-25 00:00:00.000 

ve

2010-01-01 11:11:58.000 

2 alanı birleştiren bir after insert tetikleyici kodu yazmak istiyorum.

cevap

6

Başka birinin bu iş parçacığı üzerine gelmesi durumunda (veya orijinal posterin hala bu yanıtı kullanabilmesi durumunda), bir tarih-zaman damgasını bir zamanla birleştirebilmeniz için LogParser'deki TO_TIMESTAMP (tarih, saat) işlevine bakın. - tam zaman damgası değerine sadece zaman damgası ... ve db içinde dönüştürmek zorunda kalmadan ...

18

SQL Server 2008 kullanıyorsanız veya daha sonra kullanıyorsanız, iki değeri DATE ve TIME veri türlerine atandıktan sonra ekleyebilirsiniz. İşte bir örnek.

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

Veri türleri olarak Tarih ve Saat, bir dizeden konum çekmekten daha temiz görünür. 08'e yeni diyorsun. Yani bana ilk 9 metre aldım - tablodaki tüm satırları güncelleyebilirim - sadece eklenen satırları nasıl güncellerim - en azında görünen gibi olmalıdır AFTER thx – justSteve

+0

yerine önce INSERT ÖNCE bakmalıyım Tetikleyiciyi tamamen ortadan kaldırabilir ve tabloya hesaplanmış bir sütun olarak başka bir sütun ekleyebilir. Bunu aşağıdaki gibi bir deyim kullanarak yapabilirsiniz: ALTER TABLE yourtable ADD DateAndTime (döküm (tarih olarak datetime olarak) (datetime olarak)) + cast (datetime olarak) (zaman olarak @datet))); –

+0

Benim durumumda, sabitlemek istediğim statik bir zaman geçirdim ve zaman diliminde iç dökümden kaçınmayı başardım. Öyleyse cast (cast (date_date_col tarih olarak) datetime + cast olarak ('11: 59: 59 PM 'datetime olarak) görkemli bir şekilde çalıştı ve biraz daha özlüydi. – jinglesthula

1

bu deneyin:

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 

ÇIKIŞ: merkezli

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

(1 row(s) affected) 

Seti:

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 

ÇIKIŞ:

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

Çıktıyı yeni bir sütuna eklemek için bir seçiminiz varsa, bu yeni sütunu da hesaplanmış bir sütun ve bu 2 sütunu birleştirmek için tanımlayın (bir tasarım zamanında).

Dev

İlgili konular