SQL (Teradata) Выбор данных

У меня есть вопросы, связанные с SQL (teradata в частности). Я должен сформировать отчет за 1 день.

Как мне этого добиться?

Например, в MS Access я могу сделать

WHERE DT>=#2011-01-01# and DT<=#2011-0101#

А как насчет больших парней? (SQL Server, а не MS Access).

Я знаю что можно использовать

DT between '2011-09-01' and '2011-09-02'

Но этот метод не является точным. Как я могу указать 1 день, используя оператор WHERE?

Я извиняюсь, у меня нет доступа к SQL, и я не могу проверить его; поэтому я прошу профессионального совета.

4 ответа

Решение

BETWEEN с учетом диапазона, так что это будет делать:

DT between '2011-09-01' and '2011-09-01'

И да, это точно:)

Теперь, если ваш DT это поле даты и времени (не поле даты), то вы должны изменить свой подход:

DT >= '2011-09-01' and DT < '2011-09-02'

Работа с датами в Teradata может быть немного сложнее.

Если DT - это поле "отметка времени", вы можете просто преобразовать его в дату и, поскольку вы отчитываетесь ровно за один день, просто проверить на равенство.

Допустим, вы хотите сообщить о сегодняшнем дне, поэтому перейдите к '03 / 20/2012 ':

-- Teradata: Select records where DT matches a certain day.
SELECT * -- etc...
WHERE CAST(DT as date) = TO_DATE('03/20/2012', 'mm/dd/yyyy')

MS SQL похож:

SELECT * from [webdb].[mediaguide].[fileDirectories]
WHERE CAST('03/20/2012' AS date) = CAST(DT AS date)

Технически я бы использовал параметризацию для передачи даты, но вы поняли идею.

При выборе диапазона (особенно даты и метки времени) лучше всего делать нижнюю границу включительно, верхнюю границу исключая. То есть вы хотите вещи в ассортименте lb <= x < ub, В вашем случае это составляет:

SELECT [list of columns]
FROM [table]
WHERE dt >= :startDate
AND dt < :endDate

(:variableName так я могу ввести переменные хоста в моей системе. Вам придется посмотреть, что это на терадате.)
Строки, которые вы перечислили между, будут работать как есть - я думаю, что почти все основные СУБД распознают * форматирование ISO по умолчанию.

Простой ответ будет:

WHERE DT BETWEEN Date_X AND Date_X + 1

Если вы хотите быть явно

WHERE DT BETWEEN Date_X AND Date_X + INTERVAL '1' DAY

Вы всегда можете прочитать Руководство Teradata:)

Руководство Teradata между

Следуя их руководству, x МЕЖДУ y AND z == ((x> = y) AND (x <= z))

Другие вопросы по тегам