TSQL用于组合日期字段和时间字段

时间:2010-05-25 11:21:02

标签: tsql

使用logparser将IIS日志导入数据库会导致一列具有日期值,另一列具有时间:

2010-05-25 00:00:00.000

2010-01-01 11:11:58.000

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

4 个答案:

答案 0 :(得分: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);

答案 1 :(得分:6)

如果其他人偶然发现这个帖子(或者如果原始海报仍然可以使用此答案),请查看LogParser中的TO_TIMESTAMP(日期,时间)功能,该功能允许您将仅限日期的时间戳与时间相结合 - 只有时间戳记成一个完整的时间戳值...并且不必在db ...中转换...

答案 2 :(得分: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)

答案 3 :(得分:0)

如果您可以选择将输出添加到新列中,您还可以将该新列作为计算列,并将其定义为组合这两列(在设计时)。

开发