我将约会存储为[27/Feb/2016:00:24:31 +0530]
。
我想在27/Feb/2016
中使用日期格式,并且也希望按它排序。
我已经尝试了this解决方案,但它以2016-02-27
格式返回,并且还可以正确排序。
SELECT
TO_DATE( FROM_UNIXTIME( UNIX_TIMESTAMP( SUBSTR( time, 2, 11), 'dd/MMM/yyyy' ))) AS real_date,
url
FROM cleanned_logs
ORDER BY real_date ASC;
为了获得所需的格式,我尝试使用date_format()
函数。它在1.2.1中不可用,所以我从1.0.1切换到它。
SELECT
DATE_FORMAT( FROM_UNIXTIME( UNIX_TIMESTAMP( SUBSTR(time,2,11),'dd/MMM/yyyy')), 'dd/MMM/yyyy') AS real_date,
url
FROM cleanned_logs
ORDER BY real_date ASC;
它为我提供了所需的格式,但没有正确排序。
更新:
SELECT display_date,COUNT(url) FROM
(
SELECT SUBSTR(time,2,11) as display_date,url,UNIX_TIMESTAMP(SUBSTR(time,2,11),'dd/MMM/yyyy') as real_date FROM cleanned_logs order by real_date ASC
)b group by real_date;
在分组中创建问题。这里的hive在select子句中需要real_date
。
答案 0 :(得分:0)
我认为您将数据的格式或显示与基础数据本身混为一谈。如果表将日期存储为以一种方式格式化的字符串,[27/Feb/2016:00:24:31 +0530]
它仍然是一个字符串,字符串的排序方式与实际日期,时间戳或数字不同。
理想情况下,您可以将日期存储为TIMESTAMP
数据类型。如果要显示它,请使用DATE_FORMAT
,如果要对其进行排序,请在基础数据字段上使用ORDER BY
。因此,如果您的字段属于名为TIMESTAMP
的{{1}}类型,则可以查询为
some_time
如果您遇到了存储为有效时间戳值的字符串,那么您可能需要做更多的工作,也许
SELECT DATE_FORMAT(some_time, 'dd/MMM/yyyy')
FROM some_table
WHERE some_condition
ORDER BY some_time DESC
第二个选项显示所需的值,并按数字排序 - 一个unix时间戳只是一个数字,但它与日期的顺序相同,因此无需再将其强制转换为实际日期。 / p>