TSQL для объединения поля даты и поля времени - PullRequest
6 голосов
/ 25 мая 2010

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

2010-05-25 00:00:00.000

и

2010-01-01 11:11:58.000

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

Ответы [ 4 ]

18 голосов
/ 25 мая 2010

Вы можете просто добавить два значения после приведения их к типам данных DATE и TIME, если вы используете 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);
6 голосов
/ 21 мая 2012

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

1 голос
/ 25 мая 2010

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

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 голосов
/ 03 июля 2013

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

Dev

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...