PySpark查询Parquet文件时DATEPART函数失效问题求助
在PySpark SQL中实现POS_TRANSACTION_HOUR字段生成
PySpark SQL没有DATEPART函数,你可以用以下几种方式实现和原SQL Server语句相同的效果:
方法1:使用DATE_FORMAT(最简洁)
直接通过格式化函数生成目标格式:
SELECT DATE_FORMAT(END_DATETIME, 'HH00') AS POS_TRANSACTION_HOUR FROM TRANS_Table
DATE_FORMAT的'HH'参数会返回两位24小时制的小时数(00-23),拼接00后直接得到0000、2300这类结果。
方法2:模拟原SQL逻辑
替换DATEPART(HOUR, ...)为PySpark的HOUR()函数,保留原有的字符串拼接逻辑:
SELECT RIGHT(CONCAT('0', CAST(HOUR(END_DATETIME) AS STRING)), 2) || '00' AS POS_TRANSACTION_HOUR FROM TRANS_Table
或者用LPAD简化补零操作:
SELECT LPAD(CAST(HOUR(END_DATETIME) AS STRING), 2, '0') || '00' AS POS_TRANSACTION_HOUR FROM TRANS_Table
这两种方式都是先提取小时数,转成字符串后补前导零到两位,再拼接00,和原SQL Server逻辑完全一致。
内容的提问来源于stack exchange,提问作者Javier Guzmán
相关产品推荐
相关产品推荐

