В предложении WHERE
удалите одинарные кавычки вокруг оператора DATEDIFF(minute,GateLogging.enterTime,GETDATE())>10
.
EDIT
Вы также сравниваете поле даты и времени с тем, что я бы назвал логическим. Удалить enterTime=
. Ваше заявление должно выглядеть так:
da = new SqlDataAdapter("SELECT name,[build-id],exitTime,enterTime,tagType FROM Employees,GateLogging WHERE GateLogging.tagType='Employee' AND DATEDIFF(minute,GateLogging.enterTime,GETDATE())>10", MyConn);
РЕДАКТИРОВАТЬ 2
Ваше определение таблицы выглядит следующим образом:
tagID bigint
enterTime nchar(10)
exitTime nchar(10)
date nchar(10)
Конечно, enterTime
нельзя использовать в DATEDIFF
, так как это не DATETIME
.
Вопрос: Почему вы храните даты и время как NCHAR (10) вместо DATETIME
? Это не хороший стиль!
Решение 1: Измените enterTime
и exitTime
на DATETIME
и все в порядке.
Решение 2. Измените свое утверждение, чтобы преобразовать enterTime
в действительное DATETIME
. Я предполагаю, что enterTime
содержит только время суток, поэтому вам придется смешивать часть даты перед преобразованием.
РЕДАКТИРОВАТЬ 3
Предполагая, что date
сохраняет день в формате yyyymmdd
и enterTime
хранит время в формате hh:mm:ss
, вы сможете собрать DATETIME
:
CONVERT(DATETIME, SUBSTRING(date, 1, 4) + '-' + SUBSTRING(date, 5, 2) + '-' + SUBSTRING(date, 7,2) + ' ' + entryTime, 102)
Итак, ваше утверждение сверху будет выглядеть так:
da = new SqlDataAdapter(
"SELECT name,[build-id],exitTime,enterTime,tagType
FROM Employees,GateLogging
WHERE GateLogging.tagType='Employee' AND
DATEDIFF(minute,CONVERT(DATETIME, SUBSTRING(date, 1, 4) + '-' + SUBSTRING(date, 5, 2) + '-' + SUBSTRING(date, 7,2) + ' ' + entryTime, 102),GETDATE())>10", MyConn);
В случае, если формат даты / времени, хранящийся в полях вашей базы данных, отличается, вам придется соответствующим образом скорректировать операторы SUBSTRING
в пределах CONVERT()
.