TSQL для объединения поля даты и поля времени

использование logparser для импорта журналов IIS в БД приводит к одному столбцу, который имеет значение даты и второе поле для времени:

2010-05-25 00:00:00.000

и

2010-01-01 11:11:58.000

Я хотел бы закодировать after insert триггер, объединяющий 2 поля.

4 ответов


в случае, если кто-то еще наткнется на этот поток (или если исходный плакат все еще может использовать этот ответ), посмотрите на функцию TO_TIMESTAMP ( дата, время ) в LogParser, которая позволяет объединить метку времени только с меткой времени в полное значение метки времени... и избавит вас от необходимости конвертировать в БД...


вы можете просто добавить два значения после приведения их к типам данных даты и времени, если вы используете SQL Server 2008 или более поздней версии. Вот пример.

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

попробуйте это:

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)

Если у вас есть выбор для добавления вывода в новый столбец, вы также можете сделать этот новый столбец вычисляемым столбцом и определить его для объединения этих 2 столбцов (во время разработки).

Dev