Member 12097108 Ответов: 1

Как мы можем хранить два или более раз значение в столбце В SQL server


Здравствуйте, у меня есть столбец в таблице типа TeaTimeIn, TeaTimeOut.
в самый первый раз
TeaTimeIn = 12: 10 вечера,
Чаепитие= 12: 20 вечера,
Таким образом, TeaBreakTimeSpent составляет 10 минут.

второй раз берем новый перерыв на чай это время наши earlyear TeaBreakTimeSpent удаляется и принимать новое значение.но я хочу такой, если мы возьмем число teabreak первый раз teabreatime продолжительность будет магазин с помощью запросов, если мы делаем еще один перерыв на чай, так что время earlyear timeduration и Нового времени будут добавлены и дисплей сумма из этого времени.
любить..
первый раз

TeaTimeIn = 12: 10 вечера,
Чаепитие= 12: 20 вечера,
Таким образом, TeaBreakTimeSpent составляет 10 минут.

Второй раз

TeaTimeIn = 3: 30 вечера,
Чаепитие= 3: 35 вечера,
Таким образом, TeaBreakTimeSpent составляет 5 минут.

третий раз
TeaTimeIn = 6: 10 вечера,
Чаепитие= 6: 20 вечера,
Таким образом, TeaBreakTimeSpent составляет 10 минут.

таким образом, все teabreaktimespent отображаются как 25 минут.
Если можно сохранить первое время TeaBreakTimeSpent динамически в запросе и второе время TeaBreakTimeSpent динамически в запросе и третье время TeaBreakTimeSpent динамически в запросе и после суммирования всех временных значений Teabreak и отображения его.

Что я уже пробовал:

SELECT CONVERT(VARCHAR, CreateDateTime,105) AS [LoginDate],
CONVERT(varchar(15),CAST(StartTimeIn AS TIME),100) AS [STime],
CONVERT(varchar(15),CAST(EndTimeOut AS TIME),100) AS [ETime],
CONVERT(varchar(15),CAST(MealTimeIn AS TIME),100) AS [MTime],
CONVERT(varchar(15),CAST(MealTimeOut AS TIME),100) AS [MOUT],
CONVERT(varchar(15),CAST(TeaTimeIn AS TIME),100) AS [TTime],
CONVERT(varchar(15),CAST(TeaTimeOut AS TIME),100) AS [TOUT],
CONVERT(varchar(5), DATEADD(minute, DATEDIFF(minute, StartTimeIn, ISNULL(EndTimeOut,SWITCHOFFSET(SYSDATETIMEOFFSET(), '+05:30'))), 0), 114) AS [TimeSpent]  ,
DATEDIFF(minute, StartTimeIn, ISNULL(EndTimeOut,SWITCHOFFSET(SYSDATETIMEOFFSET(), '+05:30'))) AS [TimeSpentMinutes],

CONVERT(varchar(5), DATEADD(minute, DATEDIFF(minute, MealTimeIn, ISNULL(MealTimeOut,SWITCHOFFSET(SYSDATETIMEOFFSET(), '+05:30'))), 0), 114) AS [MealTimeSpent]  ,
DATEDIFF(minute, MealTimeIn, ISNULL(MealTimeOut,SWITCHOFFSET(SYSDATETIMEOFFSET(), '+05:30'))) AS [MealTimeSpentMinutes],

CONVERT(varchar(5), DATEADD(minute, DATEDIFF(minute, TeaTimeIn, ISNULL(TeaTimeOut,SWITCHOFFSET(SYSDATETIMEOFFSET(), '+05:30'))), 0), 114) AS [TeaTimeSpent]  ,
DATEDIFF(minute, TeaTimeIn, ISNULL(TeaTimeOut,SWITCHOFFSET(SYSDATETIMEOFFSET(), '+05:30'))) AS [TeaTimeSpentMinutes],

CONVERT(varchar(5), DATEADD(minute, DATEDIFF(minute, OtherTimeIn, ISNULL(OtherTimeOut,SWITCHOFFSET(SYSDATETIMEOFFSET(), '+05:30'))), 0), 114) AS [OtherTimeSpent]  ,
DATEDIFF(minute, OtherTimeIn, ISNULL(OtherTimeOut,SWITCHOFFSET(SYSDATETIMEOFFSET(), '+05:30'))) AS [OtherTimeSpentMinutes],

 CONVERT(varchar(5),ISNULL(DATEADD(minute, DATEDIFF(minute, StartTimeIn, ISNULL(EndTimeOut,SWITCHOFFSET(SYSDATETIMEOFFSET(), '+05:30'))), 0),0)-
        (ISNULL(DATEADD(minute, DATEDIFF(minute, MealTimeIn, ISNULL(MealTimeOut,SWITCHOFFSET(SYSDATETIMEOFFSET(),'+05:30'))), 0),0) +
         ISNULL(DATEADD(minute, DATEDIFF(minute, TeaTimeIn, ISNULL(TeaTimeOut,SWITCHOFFSET(SYSDATETIMEOFFSET(), '+05:30'))), 0),0) +
	     ISNULL(DATEADD(minute, DATEDIFF(minute, OtherTimeIn, ISNULL(OtherTimeOut,SWITCHOFFSET(SYSDATETIMEOFFSET(), '+05:30'))), 0),0)),114) AS [TimeSpentWork],

		 DATEDIFF(minute, StartTimeIn, ISNULL(EndTimeOut,SWITCHOFFSET(SYSDATETIMEOFFSET(), '+05:30')))-
         (ISNULL(DATEDIFF(minute, MealTimeIn, ISNULL(MealTimeOut,SWITCHOFFSET(SYSDATETIMEOFFSET(), '+05:30'))),0)+
          ISNULL(DATEDIFF(minute, TeaTimeIn, ISNULL(TeaTimeOut,SWITCHOFFSET(SYSDATETIMEOFFSET(), '+05:30'))),0)+
          ISNULL(DATEDIFF(minute, OtherTimeIn, ISNULL(OtherTimeOut,SWITCHOFFSET(SYSDATETIMEOFFSET(), '+05:30'))),0) ) AS [TimeSpentMinutesWork]

FROM  
DailyTimeRecord

1 Ответов

Рейтинг:
2

OriginalGriff

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

ID      INT
Name    NVARCHAR
Добавить таблицу перерывов:
ID      INT
EmpID   INT, FOREIGN KEY to Employees.ID
BkStart DATETIME
BkEnd   DATETIME
Затем вы можете использовать соединение для извлечения всех перерывов на заданную дату:
SELECT e.Name, b.BkStart, b.BkEnd FROM Employees e
JOIN Breaks b ON b.EmpID = e.ID
WHERE b.BkStart BETWEEN '2016-10-11' AND '2016-10-12'


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


Member 12097108

Я не получить его, что вы, предполагают, чтобы сказать.У меня есть только одна таблица.в первый раз мы делаем перерыв, так что timeIn и timeOut будут храниться в столбце таблицы.теперь через 1 час мы снова берем перерыв это время до timein и значение таймаута будет обновлено до нового значения и вычислить новый timeSpent мой вопрос заключается в том можно ли сохранить первый перерыв timespent динамически в запросе если мы возьмем новый brak то время новый перерыв timespent будет добавлен к старому и дать мне сумму этого времени