2015-05-29 4 views
2

Я новичок. У меня есть таблица сотрудников с столбцом с указанием даты присоединения, и я хочу получить список сотрудников, которые присоединились за последние 3 месяца. Я понимаю, что мы можем получить текущую дату, используя from_unixtime (unix_timestamp()). Как рассчитать датифф? Есть ли встроенная функция DATEDIFF(), например, в MS SQL? пожалуйста посоветуй!Как рассчитать разницу по времени в улье

ответ

21
datediff(to_date(String timestamp), to_date(String timestamp)) 
0

да датированный; см: https://cwiki.apache.org/confluence/display/Hive/LanguageManual+UDF

Кстати, я нашел это на Google-поиска "улей DateDiff", это был первый результат;)

+0

Спасибо за ответ. В Руководстве по языку указано, что функция датифф вычисляет разницу между типами строк. Он также работает для типа Timestamp? – Holmes

+0

Не знаю, я никогда не использовал тип timestamp, я всегда использую строку для столбцов timestamp. Если это не сработает, просто введите столбец timestamp в строку (или оставьте его как строку в первую очередь). – maxymoo

0

Я хотел бы попробовать это первый

select * from employee where month(current_date)-3 = month(joining_date) 
+0

как насчет тех, кто присоединился менее 3 месяцев назад? Как насчет тех, кто присоединился в январе - марте? – aviad

+0

, если сегодня возможно, он хочет тех, кто присоединился к апрелю, маршу и feb, аналогично для июня, возможно, апрель и марш –

+0

попытайтесь запустить ваш запрос с current_date = 2015-01-01 и joining_date = 2014-12- 01, что было бы результатом? – aviad

0

If вам нужно разницу в секундах (т. е. вы сравниваете даты с отметками времени, а не целыми днями), вы можете просто преобразовать две строки даты или времени в формате «ГГГГ-ММ-ДД ЧЧ: ММ: СС» (или указать ваш строковый формат даты явно) с помощью unix_timestamp(), а затем вычесть их из друг друга, чтобы получить разницу в секундах. (А может затем разделить на 60,0, чтобы получить минут, или 3600,0, чтобы получить часы и т.д.)

Пример:

UNIX_TIMESTAMP('2017-12-05 10:01:30') - UNIX_TIMESTAMP('2017-12-05 10:00:00') AS time_diff -- This will return 90 (seconds). Unix_timestamp converts string dates into BIGINTs. 

Более того, что вы можете сделать с UNIX_TIMESTAMP() здесь, в том числе и как конвертировать строки с разным форматированием даты: https://cwiki.apache.org/confluence/display/Hive/LanguageManual+UDF#LanguageManualUDF-DateFunctions

Смежные вопросы