Рейтинг:
40
OriginalGriff
Это действительно непросто: вы не должны хранить даты в строковых полях, потому что это усложняет эту проблему.
SQL-даты всегда yyyy-MM-dd, а не dd/MM/yyyy, поэтому вы даже не можете сначала преобразовать их в тип даты, не используя несколько функций подстроки и много удачи.
Серьезно: измените свою базу данных. Храните свои даты в полях дат, и вы можете манипулировать ими как внутри базы данных, так и снаружи гораздо проще и гораздо гибче: например, вам не нужно беспокоиться о локали пользователя и его формате даты!
"Сэр,
Можете ли вы дать пример запроса для приведенной выше таблицы, чтобы я мог продолжить, я пробовал много способов, но не получаю"
Это не сложно: попробуйте это, чтобы дать вам ключ:
SELECT CAST((SUBSTRING(Date, 7, 4) + '-' + SUBSTRING(Date, 4, 2) + '-' + SUBSTRING(Date, 1, 2)) AS Date) AS d FROM myTable
Серьезно: избавьте себя от многих будущих неприятностей, преобразовав свою базу данных в дату или время!
tulasiram3975
Проблема в том что я уже разработал свое программное обеспечение я не хочу меняться если изменения происходят это берет на себя большой риск для меня преобразование типа может решить проблему я знаю но мне нужно обойтись без изменений
OriginalGriff
Если вы не можете изменить базу данных (а я все еще настоятельно рекомендую это сделать), то вам придется разорвать данные на части и собрать их заново как часть вашего оператора SQL SELECT: возможно, Вам будет проще сделать это как хранимую процедуру.
Принцип будет таков: используйте подстроку три раза на каждую дату, чтобы разбить ее на день, месяц и год. Затем используйте функции CONVERT или CAST, чтобы преобразовать его в полезную дату для сравнения. Если вы сделаете это в своем выборе, вам, возможно, придется сделать это дважды: один раз для нижнего диапазона дат и один раз для верхнего.
Это нетрудно, но утомительно и немного утомительно. Я бы посоветовал вам попробовать войти в любое приложение, которое вы используете для администратора базы данных, прежде чем передавать его во внешнюю программу и оператор SELECT там - вы должны получить лучшую и более быструю диагностику.
tulasiram3975
Это невозможно ...
OriginalGriff
Да, это возможно.
Попробуй, и увидишь.
tulasiram3975
Сэр,
Можете ли вы дать пример запроса для приведенной выше таблицы, чтобы я мог продолжить, я пробовал много способов, но не получаю
OriginalGriff
Ответ Обновлен
tulasiram3975
Сэр на самом деле мне нужно между датами, я думаю, что он преобразует дату в гггг-ММ-ДД в этом формате и возвращает все даты как гггг-ММ-ДД. Но Как Вернуться Между Датами
OriginalGriff
Да. Я знаю. И когда я сказал "дать вам ключ", что, по-вашему, я имел в виду?
Вы должны сделать что-то из этого для себя.
Sql, который я вам дал, преобразует вашу текстовую дату в переменную SQL date.
Если бы вы использовали это в предложении WHERE, как вы думаете, что бы произошло?
Что произойдет, если вы используете это дважды в предложении WHERE?
Ради всего святого, неужели я должен подавать его тебе на тарелочке?
tulasiram3975
нет-нет...
хорошо я сделаю что нибудь спасибо у меня есть кое какая идея
BobJanova
Это изменение предотвратит много подобных гадостей в будущем. Если это ваше программное обеспечение, а не какая-то сторонняя вещь, к которой у вас нет доступа, вы должны пройти через небольшое количество боли сейчас, чтобы исправить это. И помните об этом, чтобы в следующий раз, когда вы создадите базу данных, вы не совершили ту же ошибку!
tulasiram3975
В Следующий Раз Я Не Буду Делать Эту Ошибку, Но Это База Данных Стороннего Приложения Уже Установлена В Клиентской Системе, Поэтому Я Не Меняю Тип.
saxenaabhi6
Вот почему я предложил вам сделать представление с пользовательским вычисляемым столбцом правильной даты и запросом к нему.
OriginalGriff
Не совсем то, что он просил: вы можете сделать только вид на данные, которые были получены. Если в вашей БД много записей, а вас интересуют только десять, то это чертовски пустая трата времени!