2010-05-25 90 views
6

使用LOGPARSER导入IIS日志在一个对的时间日期值和第二场一列的分贝结果组合:TSQL的日期字段和时间字段

2010-05-25 00:00:00.000 

2010-01-01 11:11:58.000 

我想编写一个结合了2个字段的after insert触发器。

回答

6

如果有人在这个线程中绊倒(或者如果原始发布者仍然可以使用此答案),请查看LogParser中的TO_TIMESTAMP(日期,时间)函数,该函数允许您将仅限日期的时间戳与时间只有时间戳到一个完整的时间戳值...并且不需要在数据库中进行转换...

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码 - 我可以更新表中的所有行 - 我怎样才能更新插入的行 - 看起来至少我应该看看'INSERT BEFORE'而不是后面thx – justSteve 2010-05-25 11:54:40

+0

如果你可以避免完全触发,只需将另一列作为计算列添加到表中即可。你可以通过使用这样的s语句来做到这一点:ALTER TABLE yourtable ADD DateAndTime(cast(作为日期时间转换(@ datet)作为日期时间)+ cast(转换(@datet作为时间)作为日期时间)); – 2010-05-25 12:16:26

+0

在我的情况下,我有一个静止的时间,我想要解决的问题,并能够避免时间部分的内部演员。所以施放(以datetime + cast(日期时间为'11:59:59 PM')作为日期投出(some_date_col作为日期))出色地工作,并且更简洁一点。 – jinglesthula 2013-01-02 22:06:21

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 

OUTPUT:

----------------------- 
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 

OUTPUT:

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