2012-03-17 4 views
2

Если пользователь предоставляет дату в формате с помощью альфа-форма ($ date_booked):Дата столкновения между формой и базы данных

2012-1-6 

быть сравнена с датой (date_booked):

2012-01-06 

что бы правильный метод SQL, чтобы проверить это можно (с помощью PhpMyAdmin):

SELECT * FROM room WHERE date_booked LIKE $date_booked 

Или MySQL ничего не вернет?

Заранее благодарен.

+0

Какого SQL система баз данных? Какой язык программирования? Правильный ответ состоит в том, чтобы преобразовать строку в дату/дату в язык программирования, а затем передать это как параметр date/datetime в базу данных, но примеры не могут быть предоставлены, не зная этих деталей. (И, конечно, надеяться, что БД будет хранить это значение как дату-время, но, вероятно, лучше, если нет, с точки зрения правильности, чтобы принудительно преобразовать (в datetime) во время запросов и, если производительность является проблемой, используйте это как причину изменения схемы) –

+0

Я добавил MySQl и php в качестве тегов. Я считаю, что phpMyAdmin - это общий инструмент запросов, а не технология, используемая «формой», поэтому я не верю, что это часть актуального вопроса. (Я также предполагаю, что если вы используете phpMyAdmin, это также означает, что ваш общий язык - это PHP. На данный момент я понятия не имею). –

ответ

1

Предполагая, что вы используете TSQL и пользователь ввел правильную дату

SELECT * FROM room WHERE date_booked = CONVERT(date, @UserEnteredDate) 

Как вы обновили свой вопрос MySQL

Вот хороший пример того, как сравнить Дата MySQL - Change date string to date type in place?

+1

Практически правильно с форматированием кода - вам нужно отступать * четырьмя * пробелами (или нажмите кнопку '{}'). –

+0

@Damien_The_Unbeliever Человеческая ошибка время от времени.Спасибо, что указали, что вверх .. +1 – Kaf

+0

И в основном для nowt. Я уверен, что в исходном вопросе не было деталей технологии (отсюда и мой первый комментарий к нему), но, оказывается, это MySQL. Поэтому 'CONVERT' не будет работать (я бы ожидал' CAST' должен) –

2

Предполагая PHP от $variable нотация

Использование функции date_parse() в PHP, легко сравнить две даты, даже если они появляются синтаксически разные:

date_parse('2012-1-6'); 

array (
    'year' => 2012, 
    'month' => 1, 
    'day' => 6, 
    'hour' => false, 
    'minute' => false, 
    'second' => false, 
    ... 
) 


date_parse('2012-01-06'); 

array (
    'year' => 2012, 
    'month' => 1, 
    'day' => 6, 
    'hour' => false, 
    'minute' => false, 
    'second' => false, 
    ... 
) 

На стороне записки вы должны рассмотреть хранение дату/time в временной отметке Unix (в секундах с 01.01.1970) в вашей базе данных - намного проще выполнить вычисления. PHP имеет функции a weath функций даты/времени.

Если вы в конечном итоге хранить ваши даты и время, как Отметка времени Unix, то вы можете использовать РНР strtotime() function:

StrToTime - Разбирает о любом английском текстовом описании даты и времени в Отметку времени Unix

+1

Большинство баз данных (включая MySQL) имеют встроенные типы даты и времени. Это гораздо лучше использовать эти типы, а не пытаться «подразумевать» значение для других типов, таких как строка, int или десятичная. –

+0

Что вы говорите правильно @Damien. Мой опыт/привычки напоминают мне, что временные метки эпохи универсальны - если двигатель поддерживает дату/время, тогда он распознает эпоху (исправьте меня, если я ошибаюсь). Я думаю, что это все еще хороший портативный и простой в использовании выбор. – Lix

+0

временные метки эпохи универсальны - до тех пор, пока все, интерпретирующие данные, знают о эпохе? Это отходит от намерения реляционных баз данных - чтобы данные могли использоваться без внешних ссылок –

Смежные вопросы