Member 12097108 Ответов: 1

Как мы можем вычесть при использовании типа данных varchar(5) в SQL server


StartTimeIn=11: 48 утра,
EndTimeOut =4: 18 вечера,

MealTimeIn=11: 58 утра,
MealTimeOut=12: 15 вечера,

TeaTimeIn= 1: 06 вечера,
Чаепитие=1: 17 вечера,

OtherTimeIn=null,
OtherTimeOut=null,

TimeSpent (StartTimeIn to EndTimeOut) составляет 270 минут
MealBreakTimeSpent (MealTimeIn to MealTimeOut) составляет 17 минут
TeaBreakTimeSpent (TeaTimeIn to TeaTimeOut) составляет 11 минут
OtherBreakTimeSpent(OtherTimeIn to OtherTimeOut) равен null

TotalTimeSpent=242 минуты
Итак, время 4:02,
Я посылаю свой запрос, не могли бы вы, пожалуйста, исправить его.

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

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


Типы данных varchar и varchar несовместимы в операторе вычитания.

1 Ответов

Рейтинг:
10

OriginalGriff

Просто: не храните свои значения в полях VARCHAR, а используйте вместо них более подходящие типы данных. Если то, с чем вы пытаетесь работать, - это значение времени (без компонента даты), то сохраните его как целое число, содержащее количество минут с полуночи.
Затем вы можете выполнить всю необходимую арифметику и преобразовать ее обратно в значение" времени " очень просто с помощью операторов деления и модуля.