#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. Добро пожаловать. 🙂 Если мой ответ решил вашу проблему, вы можете пометить его как правильный ответ. В противном случае другие люди могут быть сбиты с толку и подумать, что на ваш вопрос все еще нужен (другой) ответ.