Заявление даты SQL - PullRequest
       6

Заявление даты SQL

0 голосов
/ 21 января 2010

Мне нужна помощь в выяснении и выражении SQL.

Я знаю, чего хочу, просто не могу выразить это.

Я использую php, поэтому он не должен быть исключительно SQL, он действует как фильтр.

Псевдокод

$query="SELECT * FROM MyTable WHERE 'TIS'  is not older than 2 days or empty  = ''$ORDER"; }

TIS в имени столбца в моей таблице, где я храню даты в этом формате 03-12-09 (d, m, y). $ORDER предназначен для упорядочения значений на основе значений из других полей, а не дат.

Я смотрю на

SELECT * 
FROM orders
WHERE day_of_order >
(SELECT DATEADD(day,-30, (SELECT MAX(day_of_order) FROM orders)) AS "-30 Days");

Но я не совсем думаю, что я нахожусь на правильном пути с этим.

Спасибо

Ответы [ 2 ]

3 голосов
/ 21 января 2010

Попробуйте следующее:

SELECT *
  FROM MyTable
  WHERE COALESCE(TIS, SYSDATE) > SYSDATE - INTERVAL '2' DAY
  $ORDER

Я не знаю, какую базу данных вы используете - в приведенном выше примере используется метод Oracle для обработки временных интервалов Если вы используете SQL Server, следующее должно быть близко:

SELECT *
  FROM MyTable
  WHERE COALESCE(TIS, GETDATE()) > DATEADD(Day, -2, GETDATE())
  $ORDER

В MySQL попробуйте это:

SELECT *
  FROM MyTable
  WHERE COALESCE(TIS, NOW()) > DATE_SUB(NOW(), INTERVAL 2 DAYS)
  $ORDER 

Надеюсь, это поможет.

0 голосов
/ 22 января 2010

Итак, я был довольно потерян во всем этом.

Как это было решено:

  • Сначала я понял, что заявление, которое я использовал, не было поддержано MySql благодаря праву Боба Джарвиса.

_ Second В комментарии vincebowdren, который "настоятельно" посоветовал мне изменить тип данных в этом поле на Date, который действительно у меня не было, это была строка.

Для меня было довольно глупо пытаться использовать SQL-операции для дат в поле со строковыми значениями.

Так что я просто RTFM: http://dev.mysql.com/doc/refman/5.1/en/date-and-time-functions.html

и:

mysql> SELECT something FROM tbl_name -> WHERE DATE_SUB(CURDATE(),INTERVAL 30 DAY) <= date_col;

Затем приступили к изменению значения поля на дату.

и это мой отлично работающий запрос:

$query="SELECT * FROM MyTable WHERE DATE_SUB(CURDATE(),INTERVAL 2 DAY) <= TIS OR TIS = 0000-00-00 $ORDER "; }

Я хотел бы поблагодарить плакатов за помощь.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...