为什么我在处理日期时不能在别名中使用列名



当前我正在使用HIVE_SQL将数据库从SQL_SERVER迁移到SPARK。

我在尝试将数字转换为日期格式时遇到了一个问题。我发现答案是:

from_unixtime(unix_timestamp(cast(DATE as string) , 'dd-MM-yyyy'))

当我执行这个查询时,它会给我带来数据,请注意,iI放置了一个与列FECHA:的名称不同的别名

SELECT FROM_UNIXTIME(UNIX_TIMESTAMP(CAST(FECHA AS STRING ) ,'yyyyMMdd'), 'yyyy-MM-dd') AS FECHA_1
FROM reportes_hechos_avisos_diarios
LIMIT 1
|   FECHA_1    | 
| --------     |
| 2019-01-01   |

但当我使用与列名相同的别名时,它会给我带来一个不一致的信息:

SELECT FROM_UNIXTIME(UNIX_TIMESTAMP(CAST(FECHA AS STRING ) ,'yyyyMMdd'), 'yyyy-MM-dd')  AS FECHA
FROM reportes_hechos_avisos_diarios
LIMIT 1
|  FECHA   | 
| -------- |
| 2.019    |

我知道简单的答案是,放一个与列名不同的别名,但我在Tableau中有一个实现,它来自这个查询。更改这些列很复杂,因为基本上我必须更改所有实现,所以我需要保留列名。这个查询在SQL SERVER中对我有效,但我不知道为什么在hive中不起作用。问题预期结果

PSDT:谢谢你的关注,这是我在堆栈中问的第一个问题,我的母语不是英语,如果我有语法错误,很抱歉。

没有order bylimit 1在运行之间可能会产生不确定的结果,因为由于并行执行,行的顺序是随机的,一些因素可能会以某种方式影响它,但不能保证获得相同的行。

发生了什么?我猜你收到了不同的行,而该行的日期已损坏,这就是为什么会返回一些奇怪的结果。

此外,您还可以使用另一种转换方法:

select date(regexp_replace(cast(20200101 as string),'(\d{4})(\d{2})(\d{2})','$1-$2-$3')) --put your column instead of constant.

结果:

2020-01-01

最新更新