在Azure Spark SQL中如何将毫秒舍入为秒?
Date_format: 2023-06-16T00:00:19.645 desired_result should be: 2023-06-16T00:00:20
字符串我试着在下面使用。但它没有给出正确的结果。
from_unixtime(unix_timestamp(timestamp("date_col"))/1000 ,"yyyy-MM-dd HH:mm:ss")
型
fjaof16o1#
您可以通过使用这些内置函数来实现这一点。
unix_timestamp
date_format
concat(".",<int>)
round
Example:
spark.sql("set spark.sql.legacy.timeParserPolicy=LEGACY") spark.sql("""select *,to_timestamp(unix_timestamp(ts) + round(concat(".",date_format(ts, "S")))) round_ts from ( select timestamp('2023-06-16 00:00:19.645') as ts)a""").\ show(10,False) #+-----------------------+-------------------+ #|ts |round_ts | #+-----------------------+-------------------+ #|2023-06-16 00:00:19.645|2023-06-16 00:00:20| #+-----------------------+-------------------+
字符串
lawou6xi2#
您可以将时间戳增加1秒,然后使用DATE_TRUNC删除毫秒
DATE_TRUNC
q = """ SELECT ts, DATE_TRUNC('SECOND', ts + INTERVAL 1 SECOND) AS round_ts FROM ( SELECT TIMESTAMP('2023-06-16 00:00:19.645') AS ts ) """ spark.sql(q).show(10, False) +-----------------------+-------------------+ |ts |round_ts | +-----------------------+-------------------+ |2023-06-16 00:00:19.645|2023-06-16 00:00:20| +-----------------------+-------------------+
kb5ga3dv3#
请也试试这个:
from_unixtime(round(unix_millis(timestamp('2023-06-16T23:59:59.999'))/1000) ,"yyyy-MM-dd HH:mm:ss")
3条答案
按热度按时间fjaof16o1#
您可以通过使用这些内置函数来实现这一点。
unix_timestamp
->获取epoch时间戳值date_format
->获取毫秒concat(".",<int>)
->将毫秒转换为十进制round
->舍入毫秒值Example:
字符串
lawou6xi2#
您可以将时间戳增加1秒,然后使用
DATE_TRUNC
删除毫秒字符串
kb5ga3dv3#
请也试试这个:
字符串