Формат DateTime и расчет разницы в секундах в SQL-запросе - PullRequest
0 голосов
/ 24 мая 2018

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

  1. Как отформатировать столбец даты и времени с определенным форматом даты
  2. Как найтивремя между началом и остановкой выполнения в секундах

Я создал схему с запросом ниже,

    CREATE TABLE User (UserID int NOT NULL UNIQUE, Username Varchar(200), PRIMARY KEY (UserID));

    create table Process (ProcessID int NOT NULL UNIQUE, ProcessName varchar(100),LastModifiedDate datetime, LastModifiedByUser int not null UNIQUE, PRIMARY KEY (ProcessID),
    FOREIGN KEY (LastModifiedByUser) REFERENCES User(UserID));

    create table session (SessionID int NOT NULL UNIQUE, processID int NOT NULL UNIQUE , startdatetime datetime , stopdatetime datetime, startedbyuser int NOT NULL UNIQUE , PRIMARY KEY (sessionid) , FOREIGN KEY (processid) REFERENCES process(ProcessID) , FOREIGN KEY (startedbyuser) REFERENCES user (UserID));


    INSERT INTO User (UserID, Username)VALUES ('1', "XXX");
    INSERT INTO User (UserID, Username)VALUES ('2', "YYY");
    INSERT INTO User (UserID, Username)VALUES ('3', "ZZZ");

    INSERT INTO Process (ProcessID, ProcessName, LastModifiedDate,LastModifiedByUser) VALUES ('100', "running the job", CAST(N'2012-06-18 10:34:09.000' AS DateTime) , '1');
    INSERT INTO Process (ProcessID, ProcessName, LastModifiedDate,LastModifiedByUser) VALUES ('101', "Forced stopped the application", CAST(N'2012-06-18 10:34:09.000' AS DateTime) , '3');

    INSERT INTO session (SessionID, processID, startdatetime,stopdatetime , startedbyuser) values ('1001', '101',CAST(N'2012-06-18 12:34:09.000' AS DateTime ), CAST(N'2012-06-18 23:34:09.000' AS DateTime), '1');
    INSERT INTO session (SessionID, processID, startdatetime,stopdatetime , startedbyuser) values ('1002', '100',CAST(N'2012-06-18 15:34:09.000' AS DateTime ), CAST(N'2012-06-18 17:34:09.000' AS DateTime), '3');

И попытался получить данные,

SELECT Process.ProcessID, session.startedbyuser , session.startdatetime, session.stopdatetime , Process.LastModifiedDate, process.LastModifiedByUser FROM Process INNER JOIN session ON Process.ProcessID=session.ProcessID;

1 Ответ

0 голосов
/ 24 мая 2018

Как отформатировать столбец даты и времени с определенным форматом даты

Вы работаете в SQL 2008, поэтому у вас действительно есть только КОНВЕРТ

Как найти продолжительность времени между началом и окончанием выполнения в секундах

Для этого у вас есть DATEDIFF

SELECT
    P.ProcessID
    ,S.startedbyuser
    ,[FormattedDateTime] = CONVERT(VARCHAR(30), S.startdatetime, 109)
    ,S.startdatetime
    ,S.stopdatetime
    ,P.LastModifiedDate
    ,Duration_in_Seconds = DATEDIFF(SECOND, S.startdatetime, S.stopdatetime)
    ,duration_as_time = CONVERT(TIME,stopdatetime-startdatetime) 
    ,P.LastModifiedByUser
FROM
    dbo.Process P
INNER JOIN  [dbo].[session] S ON P.ProcessID    = S.processID
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...