Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
SQL-запрос сравнения дат
|
|||
|---|---|---|---|
|
#18+
Есть аксесовская база test, поле даты Time (содержит к примеру 01.12.2001) Dim d1 As Date Option Explicit Private Sub Command1_Click() d1 = InputBox("vedite") Data2.RecordSource = "Select sum(Obem) as f1 from test where (Time = " + " #" + d1 + "#" + ") " Data2.Refresh End Sub Что-то селект не работает, пишет несоответствие типов. Переменную d1 вводим, к примеру, в виде 01.11.2003 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.02.2004, 14:19 |
|
||
|
SQL-запрос сравнения дат
|
|||
|---|---|---|---|
|
#18+
Приведи дату к виду mm/dd/yyyy ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.02.2004, 14:34 |
|
||
|
SQL-запрос сравнения дат
|
|||
|---|---|---|---|
|
#18+
У меня тот же вопрос (проблема). Я сразу же поробовал привести дату к виду mm/dd/yyyy через функцию format(dDate,"mm/dd/yyyy"), но фиг там. дата все равно на выходе получается в том формате, который указан в системе (dd.mm.yyyy). да и вообще, формату доверять - себя не уважать. DateValue тоже дату дает в системном, русском формате (dd.mm.yyyy), так что SQL тоже на него ругается. Решил это приведением дат в текстый вид. ... WHERE str(datevalue(Date))=str('" & datevalue(dDate) & "';". В варианте текущего вопроса это может быть так: "Select sum(Obem) as f1 from test where (str(datevalue(Time)) = str(" + DateValue(d1) + "));" DateValue для обоих дат исползуется, чтобы они были точно приведены к одному виду (системному dd.mm.yyyy). Запрос работает, данные выбираются правильно. Но хотелось бы задать вопрос к гуру - стоит ли так делать, или есть более ПРАВИЛЬНОЕ решение. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.02.2004, 15:09 |
|
||
|
SQL-запрос сравнения дат
|
|||
|---|---|---|---|
|
#18+
:) Это-то понятно что в текстовый можно перевести и сравнить, думал что есть прямое решение, а не через... Кстати, когда сравнение в текстовом формате, то дату надо приводить к сл. формату: год.месяц.день Иначе сравнение работать будет, но неправильно:) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.02.2004, 15:30 |
|
||
|
SQL-запрос сравнения дат
|
|||
|---|---|---|---|
|
#18+
...я имел ввиду что если знак не "=", а ">" или "<" использовать. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.02.2004, 15:33 |
|
||
|
SQL-запрос сравнения дат
|
|||
|---|---|---|---|
|
#18+
Есть несколько правил которые обнаружил при работе с SQL Server и Access 1. Дата на выходе всегда в системном формате. 2. Дата в SQL запросах передается в формате mm/dd/yyyy или yyyy-mm-dd. 3. Дата в Stored Procedured передается в системном формате. В виду местной специфики никогда не приходилось передавать дату разделеную точками. формату доверять - себя не уважать Очень странное утверждение и не согласен с ним ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.02.2004, 15:37 |
|
||
|
SQL-запрос сравнения дат
|
|||
|---|---|---|---|
|
#18+
Тут весь корень проблемы состоит в том, что многие VB функции для работы с датой используют региональные настройки виндов и об этом никогда нельзя забывать. Я уже сталкивался с программами, которые глючили при нестандратном формате даты в виндах (можно хоть такой поставить: 2004-11-24). Решение: 1. ср-вами API можно получить формат даты с разделителями или засунуть свою дату, а на выходе получить уже в текщем формате. 2. ср-вами VB: 2.1 Если вам надо получить текстовую строку нужного формата, а на руках у вас переменная типа Date, то используйте Format: Format(Date,"mm/dd/yyyy") 2.2 Если у вас наоборот строка или в отдельных переменных день, месяц, год, тогда спасение функция DateSerial() Dim d as Date iDay=CInt(strDay) iMon=CInt(strMon) iYear=CInt(strYear) d=DateSerial(iDay, iMon, iYear) Ну и на последок, не забывать еще, что в VB в формате Date хранится дата вместе со временем. Так что если вы напишите d=Now(), то получите дату со временем и в: If d=Date Then... никогда не полчите True, потому что чистая дата Date будет не равна переменной d, в которой в дробной части лежит время в секундах с начала дня ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.02.2004, 17:06 |
|
||
|
SQL-запрос сравнения дат
|
|||
|---|---|---|---|
|
#18+
Код: plaintext 1. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.02.2004, 17:57 |
|
||
|
SQL-запрос сравнения дат
|
|||
|---|---|---|---|
|
#18+
2PA Проверил. Работает. А можно маленький коммент по обратным слэшам в Format(d1, "\#mm\/dd\/yyyy\#). В описании Format про это ничего не сказано. Похоже, обратный слэш показывает, сто следующий символ не служебный. То е так? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.02.2004, 10:03 |
|
||
|
SQL-запрос сравнения дат
|
|||
|---|---|---|---|
|
#18+
2boebik "Формату доверять себя не уважать." Я о том, что функция полностью зависима от региональных настроек и если не указывать дополнительной информации то результаты работы программы на компах с разными настройками будут плачевными. Например, Формат возвращает Variant и при том же сравнении будет приводить типы в соответствии со сравниваемыми переменными. Если в примере Time = " & Format(d1,"\#mm\/dd\/yyyy\#") Time будет string, то и результат Format тоже будет стрингом в сравнении. А если Time будет дата, то и результат Format будет сравниваться в Date типе. Таким образом имеет, что жестко зашив формат даты mm/dd/yyyy мы получаем полную ж;%у огурцов при обычном сравнении (а не в SQL) на системе с региональными настройками русскими или украинскими. В общем тонкостей - вагон. На сайте Мелкософта есть отличная серия статей про борьбу с форматом Date. Там авторы также придерживаются мысли, что чем меньше Дату мы юзаем, тем меньше глюков мы имеем. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.02.2004, 10:09 |
|
||
|
SQL-запрос сравнения дат
|
|||
|---|---|---|---|
|
#18+
2Yuriy Goodz, 1. Можно ли получить ссылку на статьи о которых Вы упоминули. 2. Format не нужно использовать для сравнения дат, по моему я нигде и никогда не заявлял такого. Основное приминение функции Format (для дат) это из системного формата даты получить требуемый. К примеру, имея переменную типа Date (в системном формате) надо получить дату в американском формате. В этом случае функция Format просто не заменима Код: plaintext 1. 3. Для сравнения и работы с датами лучше использовать переменные типа Date. Для этого и существуют функции DateAdd, DateDiff и т.д. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.02.2004, 10:23 |
|
||
|
SQL-запрос сравнения дат
|
|||
|---|---|---|---|
|
#18+
Yuriy GoodzА можно маленький коммент по обратным слэшам в Format Пожалуйста: (\) Display the next character in the format string. To display a character that has special meaning as a literal character, precede it with a backslash (\). The backslash itself isn't displayed. Using a backslash is the same as enclosing the next character in double quotation marks. To display a backslash, use two backslashes (\\). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.02.2004, 15:02 |
|
||
|
SQL-запрос сравнения дат
|
|||
|---|---|---|---|
|
#18+
Да какие замороты с датами? {ts 'yyyy-mm-dd hh:min:ss'} Select sum(Obem) as f1 from test where (Time = {ts '" & Format(d1, "yyyy-mm-dd") & " 00:00:00'}" ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.02.2004, 15:25 |
|
||
|
SQL-запрос сравнения дат
|
|||
|---|---|---|---|
|
#18+
2boevik http://www.microsoft.com/Rus/Msdn/Activ/MSVB/Archive/Data/Default.mspx ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.02.2004, 13:18 |
|
||
|
SQL-запрос сравнения дат
|
|||
|---|---|---|---|
|
#18+
2 РА Да, протупил. В описании User-Defined Numeric Formats (Format Function) есть и про backslash :( Фэнкс ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.02.2004, 13:28 |
|
||
|
SQL-запрос сравнения дат
|
|||
|---|---|---|---|
|
#18+
2DIKI Навреное опять плохо ищу .. мне MSDN грит, что не знает он ничего про фигурные скобки ...не будет ли любезен многоуважаемый джин бросить в меня дескрипшином? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.02.2004, 13:34 |
|
||
|
SQL-запрос сравнения дат
|
|||
|---|---|---|---|
|
#18+
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/acdata/ac_8_con_03_04l0.asp ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.02.2004, 15:28 |
|
||
|
SQL-запрос сравнения дат
|
|||
|---|---|---|---|
|
#18+
Ага. Понятно. Это еще один промежуточный формат специально для ODBC и OLE DB. Ну не знаю следует ли использовать еще один доп.промежуточный формат. Опыт подсказывает, что более простой код легче сопровождать самому в будущем. А все эти доп.навороты потом выливаются в дополнительные часы, которые тратятся на разбор той крутизны, которую сам же и наворотил. Я все-таки придерживаюсь линии - пусть код будет больше, но проще. "Синдром" тотальной оптимизации у меня прошлом уже давно. Время - деньги. Но в любом случае спасибо за наводку. Будет полезно знать, если встретится когда-нибудь такая фича. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.02.2004, 13:44 |
|
||
|
|

start [/forum/topic.php?fid=60&msg=32405861&tid=2170037]: |
0ms |
get settings: |
9ms |
get forum list: |
16ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
34ms |
get topic data: |
10ms |
get forum data: |
2ms |
get page messages: |
63ms |
get tp. blocked users: |
2ms |
| others: | 231ms |
| total: | 373ms |

| 0 / 0 |
