Как получить все значения из функции datediff с помощью запроса oledb, и данные, полученные из файла Excel, были импортированы

#vb.net

#vb.net

Вопрос:

Я хочу показать все значения из Excel, с помощью oledb query datediff которых будут использоваться данные, date created и last login < 20 показать все значения в этом условии, но у меня возникла проблема с использованием запроса datediff. Я не знаю, как использовать запрос datediff, используя значения данных Excel. Кто-нибудь может мне помочь?

Это код :

 dta = New OleDbDataAdapter("select * from [Sheet1$] WHERE
   datediff(FORMAT([Last Login Date], 'dd/mm/yyyy'),FORMAT([Last Login
   Date], 'dd/mm/yyyy')) > 20", conn)
  

Комментарии:

1. вы не указываете интервал (т. Е. День, год, месяц и т. Д.) datediff , И я не думаю, что вам нужен формат, пусть datediff выполняет вычисление по формату даты, который использует база данных. Это типы дат в таблице, верно?

2. да, но значение друг друга отличается «дата последнего входа в систему» = 12/10/2018 16:47:43, » дата создания» 01/10/2018.

3. в нем говорилось: необработанное исключение = для одного или нескольких обязательных параметров не задано значение. это мой новый код: dta = New OleDbDataAdapter(«select * from [Sheet1 $] WHERE datediff(день, [Дата последнего входа], [Дата активного / Дата создания])> 90», conn)

4. Что такое [Дата активна / Дата создания], это фактический заголовок столбца? Если да, вы уверены, что это именно то написание. Ваша ошибка обычно означает, что есть поле, которое оно не распознает, поэтому предполагается, что это параметр.

5. Я также думаю, что в вашем примере ваши даты отменены, это приведет к отрицательному числу.

Ответ №1:

Вы говорите, что ваш новый код:

 dta = New OleDbDataAdapter("select * from [Sheet1$] WHERE datediff(day,[Last Login Date],[Date Active / Create Date]) > 90", conn)
  

В соответствии со спецификациями, которые вы должны использовать d вместо day для первого значения параметра вашего вызова DateDiff .

И вы должны поместить его в кавычки, поэтому "d" вместо просто d .

Но использовать кавычки внутри строковой переменной в VB.NET , вы должны удвоить кавычки. Вот так: ""d"" .

Итак, вы можете попробовать это:

 dta = New OleDbDataAdapter("select * from [Sheet1$] WHERE datediff(""d"",[Last Login Date],[Date Active / Create Date]) > 90", conn)
  

Это работает для вас?

Редактировать: также отметьте комментарий @CharlesMay о переключении полей даты для получения положительного значения.

Редактировать 2:

Поскольку вы выполняете этот запрос через OleDb-соединение из VB.NET , возможно, это тот случай, когда вам нужно использовать одинарные кавычки внутри запроса.

 dta = New OleDbDataAdapter("select * from [Sheet1$] WHERE datediff('d',[Last Login Date],[Date Active / Create Date]) > 90", conn)
  

Однако я не уверен. В настоящее время я не могу его протестировать. Это все просто предложения.

Комментарии:

1. Добро пожаловать. 🙂 Если мой ответ решил вашу проблему, вы можете пометить его как правильный ответ. В противном случае другие люди могут быть сбиты с толку и подумать, что на ваш вопрос все еще нужен (другой) ответ.