在 Clickhouse 中将 AM/PM 转换为 DateTime 的日期时间字符串

问题描述

我无法将包含 DateTime 信息的字符串转换为 AM/PM 格式。
我在上午 12:10 和下午 12:10 得到相同的结果,但这些应该不同。
除了 12:xx:xx AM 工作正常。

在这里做错了吗?

select 
    parseDateTimeBestEffort('2020-01-01 12:10:00 AM'),parseDateTimeBestEffort('2020-01-01 12:10:00 PM') 

结果:

2020-01-01 12:10:00
2020-01-01 12:10:00

解决方法

此错误行为已从 ClickHouse 版本 21.1.2.15 开始修复。


不幸的是,这是当前实现的特殊性。让我们检查源代码:

parseDateTimeBestEffort.h

AM/PM - AM 被忽略,PM 表示:如果值小于 12,则添加 12 小时。

(见parseDateTimeBestEffort.cpp


我创建了错误 #18402 parseDateTimeBestEffort should not ignore AM abbreviation for 12th hour


作为一种解决方法,我建议这样:

#!/bin/sh

mysql -u root -pflash  << EOF

use workers;
SELECT * FROM Persons;

SELECT pid,name FROM Persons WHERE gender="F";

SELECT pid,name FROM Persons WHERE gender="M";

SELECT pid FROM Persons ORDER BY pid DESC LIMIT 1;



commit;
EOF

 if [[ $(mysql -u root -p -e "select COUNT(pid) from workers.Persons" | grep -E '[[:digit:]]+') -gt "5" ]]
 then 
     echo "Rows are greater then 50"
 fi