Member 13332242 Ответов: 3

Проблема с использованием даты в запросе


Привет, почему этот запрос ничего не вытянет?
select * from FGBTRNH
where fgbtrnh_trans_date = '30-JUN-17' and fgbtrnh_rucl_code = 'JE16'
Я знаю, что есть данные, которые имеют эту дату с этим кодом.... но если я напишу это, это сработает? Есть ли что-то с датой или что я упускаю?....
select * from FGBTRNH
where fgbtrnh_rucl_code = 'JE16'
and fgbtrnh_trans_date >= '30-JUN-17'


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

Я не пробовал много, но ТОЛЬКО используя больше и знак равенства вместо того, чтобы просто равный на дату

F-ES Sitecore

Мы ничего не знаем о вашей схеме базы данных или о данных, которые в ней находятся, так как же мы можем сказать вам, почему ваш запрос не возвращает данные?

Если бы мне пришлось угадать, это было бы потому, что ваше поле даты на самом деле является полем даты и времени с полем, отличным от полуночи.

'30 июня 17 13: 30: 00' < & gt; '30 июня 17'

Если это так, то вы можете сделать преобразование в поле trans date в поле WHERE, чтобы получить его в формат, в котором нет элемента time. Google " SQL datetime convert"

3 Ответов

Рейтинг:
2

ashokmaurya786

преобразуйте свой формат datetime.

SELECT * FROM tablename
WHERE  CONVERT(VARCHAR,[Datecolumn],103) <= CONVERT(VARCHAR,@param,103)


Рейтинг:
1

RickZeeland

Попробуйте эту нотацию для даты: '2017-06-30'.
Также видеть: Функции даты в SQL Server и MySQL[^]
Если у вас есть компонент времени в вашей дате, попробуйте сделать это:

datediff(day, date, '2017-06-30') = 0


Member 13332242

Это не сработало, это говорит о том, что литерал не соответствует формату string'... но спасибо в любом случае

RickZeeland

Тогда у вас, вероятно, есть компонент времени в вашей дате, я обновлю ответ ...

Рейтинг:
1

OriginalGriff

Если ваш столбец является полем DATETIME, то он должен точно совпадать, чтобы получить "равно" для работы-вплоть до микросекунды. Если ваша дата в столбце вообще имеет компонент времени, она не будет совпадать - вы можете обойти это, приведя ее к полю даты перед сравнением.

Но "30-JUN-17" может быть проблемой: он требует, чтобы SQL проанализировал строку в DATETIME, и для этого он должен сделать предположения о формате, в котором вы ее предоставили, что может быть неверно.
Попробуйте сравнить с "2017-06-30" (даты формата ISO) и посмотреть, улучшит ли это скорость улова.
Также убедитесь, что вы правильно проверили дату и код - поля DATETIME в SQL вообще не имеют формата, поэтому вы можете неправильно интерпретировать результат.

Если ваш столбец содержит значения VARCHAR или NVARCHAR вместо дат, то это ваша проблема, и вам нужно изменить свою БД, прежде чем вы даже подумаете о сравнении чего-либо.


Member 13332242

Хорошо, я понимаю, что вы говорите о поле datetime, которое должно быть равно до микросекунды, но чего я не понимаю, так это почему, если я набираю:

выберите * из FGBTRNH
где fgbtrnh_trans_date = '30-JUN-17'

Я получаю сведения.... его только тогда, когда я добавить "и fgbtrnh_rucl_code = 'JE16'" с запросом, что она не работает. Это то, что я пытаюсь понять, почему он будет извлекать данные сам по себе, но не тогда, когда я добавляю оператор "и".

OriginalGriff

Потому что нет строк, которые проходят оба условия. Некоторые могут передать ваше условие даты, некоторые могут передать ваше условие кода - но ни одна строка не проходит одновременно. Проверьте свои данные, которые возвращаются без проверки fgbtrnh_rucl_code, и вы должны увидеть.