Sql Shorthand For Dates - PullRequest
       10

Sql Shorthand For Dates

1 голос
/ 02 декабря 2009

Есть ли способ написать запрос, эквивалентный

select * from log_table where dt >= 'nov-27-2009' and dt < 'nov-28-2009';

, но вы можете указать только 1 дату и сказать, что хотите получить результаты за весь этот день до следующего.

Я просто придумываю это, но что-то вроде:

select * from log_table where dt = 'nov-27-2009':+1;

Ответы [ 5 ]

2 голосов
/ 02 декабря 2009

Я не верю, что существует один метод, который является переносимым для всех СУБД.

Проверка в одной из моих ссылок ( Поваренная книга SQL ) показывает, что ни одна СУБД не решает проблему так же. Я бы порекомендовал проверить Главу 8 этой книги, которая охватывает все различные методы для DB2, Oracle, PostgreSQL, MySQL.

Мне приходилось сталкиваться с этой проблемой в SQLite , и, хотя Поваренная книга SQL не обращается к этой СУБД, поэтому я немного упомяну об этом здесь. SQLite не имеет типа данных даты / времени ; Вы должны создать свои собственные, сохранив все данные даты / времени как TEXT и убедитесь, что ваше приложение принудительно использует их форматирование. SQLite имеет набор функций преобразования даты / времени , которые позволяют добавлять номинальные дату / время при сохранении данных в виде строк. Если вам нужно добавить две длительности (ЧЧ: ММ: СС) друг к другу, однако, основываясь на данных, которые вы сохранили в текстовых столбцах, которые вы рассматриваете как данные даты / времени, вам нужно будет написать свои собственные функции (поиск «Определение пользовательских функций SQLite») и присоединить их к базе данных во время выполнения с помощью вызова sqlite3_create_function(). Если вам нужен пример некоторых пользовательских функций, которые добавляют значения времени, дайте мне знать.

0 голосов
/ 02 декабря 2009

Имеет столбец, в котором только часть даты (время 00: 00: 00.000), а затем вы можете добавить предложение where: WHERE dt = '2009-11-27'

0 голосов
/ 02 декабря 2009

Пока вы имеете дело с типом данных даты для соответствующего типа данных, будет работать следующее:

t.date_column + 1

... добавит один день к указанной дате. Но мне еще предстоит найти базу данных, которая допускает неявное преобразование типов данных в дату.

SELECT '12-10-2009' + 1

... произойдет сбой на SQL Server, поскольку SQL Server выполняет неявное преобразование только при сравнении со столбцом типа данных datetime. Так что вам нужно использовать:

SELECT CONVERT(DATETIME, '12-10-2009') + 1

Для Oracle вам придется использовать функцию TO_DATE; MySQL будет использовать что-то вроде STR_TO_DATE и т. Д.

0 голосов
/ 02 декабря 2009

С SQL Server вы можете

   Select * From table
   Where dt >= DateAdd(day, DateDiff(day, 0, @ParamDate), 0)
      And dt < DateAdd(day, DateDiff(day, 0, @ParamDate), 1)
0 голосов
/ 02 декабря 2009

Для MS SQL Server, проверьте DATEPART .

/* dy = Day of Year */
select * from log_table where datepart(dy, dt) = datepart(dy, '2009-nov-27');
...