SQL Изменить значения времени с отложенными минутами на «предыдущую» минуту - PullRequest
0 голосов
/ 12 марта 2019

Вот пример: В моей базе данных есть несколько записей, где значения времени:

10:00:00
10:10:00
10:20:00
...

Тогда иногда есть такие значения, когда мы имеем задержку в 1 минуту, например:

10:20:00
10:31:00 <-
10:40:00
10:51:00 <-

И я хотел, чтобы эти числа, каждый, шли в соответствующие минуты:

10:20:00
10:31:00 -> 10:30:00
10:40:00
10:51:00 -> 10:50:00

Edit: время - единственные записи, у меня есть мое значение даты в другом столбце, для визуализации мои столбцы

keyDate     keyTime   Sequency   Value
12-03-2018  10:40:00  12         143

1 Ответ

0 голосов
/ 12 марта 2019

Пожалуйста, попробуйте это.

 SELECT  
    CONVERT(TIME,CASE WHEN RIGHT(datepart(minute,BeginTime),1) = 1 
        THEN 
            CONVERT(VARCHAR(2),datepart(Hour,BeginTime)) +':'
            + CONVERT(VARCHAR(2),datepart(minute,BeginTime) - 1) 
            +':'
            + CONVERT(VARCHAR(2),datepart(second,BeginTime)) 
        ELSE 
            CONVERT(VARCHAR(8),BeginTime)  
        END)
FROM @tbl

Например

Declare @tbl Table(
ArrangeId INT ,
BeginTime   TIME,
EndDate   NVARCHAR(50),
DeptId INT
)

INSERT INTO @tbl VALUES(1,'7:20:00','22:30',NULL)
INSERT INTO @tbl VALUES(3,'7:10:00','23:00',NULL)
INSERT INTO @tbl VALUES(2,'7:11:00','23:59',NULL)
INSERT INTO @tbl VALUES(4,'6:10:00','22:30',NULL)
INSERT INTO @tbl VALUES(4,'5:11:00','22:30',NULL)
INSERT INTO @tbl VALUES(4,'5:31:00','22:30',NULL)


SELECT  
    CONVERT(TIME,CASE WHEN RIGHT(datepart(minute,BeginTime),1) = 1 
        THEN 
            CONVERT(VARCHAR(2),datepart(Hour,BeginTime)) +':'
            + CONVERT(VARCHAR(2),datepart(minute,BeginTime) - 1) 
            +':'
            + CONVERT(VARCHAR(2),datepart(second,BeginTime)) 
        ELSE 
            CONVERT(VARCHAR(8),BeginTime)  
        END)
FROM @tbl
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...