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

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

2 голосов
/ 20 марта 2012

У меня есть вопросы, связанные с 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 ]

5 голосов
/ 20 марта 2012

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

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

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

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

DT >= '2011-09-01' and DT < '2011-09-02'
4 голосов
/ 20 марта 2012

Работа с датами в 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)

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

2 голосов
/ 20 марта 2012

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

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

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

0 голосов
/ 17 июля 2018

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

WHERE DT BETWEEN Date_X AND Date_X + 1

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

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

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

TeradataРуководство по МЕЖДУ

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

...