C++Builder
  Начало   Форум   Помощь Войти Регистрация  
Страниц: [1]   Вниз
  Печать  
Автор Тема: Про параметризованные запросы  (Прочитано 18960 раз)
Tantos
А ты воспользовался поиском перед тем, как спросить?!
Давний друг
**

Сказали спасибо: +350/-28
Offline Offline

Сообщений: 2181


« : 18 января 2010, 02:51:26 »

"Был я айтишником в одном турагентстве. Как-то, шерстя базу данных, я нашёл информацию о ценах в отелях на ближайшие три года. Спрашиваю у генерального директора, как это так: то ли у нас ясновидец в штате появился, то ли отели по три года не меняют цены в условиях инфляции? Босс ответил, что данные туда попали по ошибке, и их надо удалить.

Всего один короткий запрос. Всего две забытые кавычки:

delete from prices where price_date>unix_timestamp(2009-12-31)

Сервер радостно подсчитал: 2009 – 12 – 31 = 1968. Как и было заказано, база данных грохнула цены на все даты позже 1968 секунд от начала юникс-эпохи (то есть после 0 часов 32 минут 42 секунд 1 января 1970 года). На тот момент не существовало не только самой фирмы, но даже и самого гендиректора.

В итоге все отели лишились всех цен. Вытаскивать в авральном режиме из бэкапов несколько сотен тысяч строк вручную было ой как весело..." (c) by ITHappens

Мораль сей басни такова - используйте параметризованные запросы, молодежь! И тогда будет вам меньше геморроя с представлением данных, особенно дат!
Записан
Лена
Гость
« Ответ #1 : 07 февраля 2010, 20:21:28 »

На взирая на раздел юмора, все же пару технических вопросов.  Крутой
Какая CУБД использовалась?
Как на такой запрос среагировала бы CУБД PostgreSQL?
Записан
Tantos
А ты воспользовался поиском перед тем, как спросить?!
Давний друг
**

Сказали спасибо: +350/-28
Offline Offline

Сообщений: 2181


« Ответ #2 : 08 февраля 2010, 05:22:31 »

1. Скорее всего, MySQL.
2. А ты проверь Подмигивающий . Если серьезно, то с PostgreSQL не работал. Как там организовано хранение даты/времени? Что взято за точку отсчета?
Записан
Лена
Гость
« Ответ #3 : 10 февраля 2010, 14:58:19 »

А ты проверь

Похожей функции не нашла: http://postgresql.ru.net/manual/functions-datetime.html
Записан
Tantos
А ты воспользовался поиском перед тем, как спросить?!
Давний друг
**

Сказали спасибо: +350/-28
Offline Offline

Сообщений: 2181


« Ответ #4 : 11 февраля 2010, 02:36:55 »

Как-то так:
http://www.opennet.ru/cgi-bin/openforum/vsluhboard.cgi?az=printer_format&om=1476&forum=vsluhforumID8
или так:
http://tmbu.info/convert-date-to-unix-timestamp-and-back/
Записан
Ramzay
Участник
**

Сказали спасибо: +14/-0
Offline Offline

Сообщений: 179


« Ответ #5 : 15 июля 2010, 16:25:53 »

Все правильно, можно даже не смеяться. Вот, например, как MS SQL реагирует:

select convert(datetime,'2010-07-15')
2010-07-15 00:00:00.000

select convert(datetime,2010-07-15)
1905-06-12 00:00:00.000
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в: