没有时间戳记的记录
问题描述:
我有一个包含数据类型日期列的表。没有时间戳记的记录
数据从2005年开始通过API格式“MM/DD/YYYY HH12:MI:SS AM”填充,并在某些地方沿着年份改变为“MM/DD/YYYY”,不知道从何时开始。
现在我需要找出什么时候开始发生。如何在查询中使用或不使用时间戳记来分隔记录?
P.S:表是巨大的,数以百万计的记录,所以获取所有行和排序不会帮助。
答
trunc(日期)函数删除日期的时间部分。对于时间trunc(日期)<>日期和没有时间trunc(日期)=日期的记录。
select *
from your_table
where trunc(date_column)=date_column;
编辑:
要带走任何误解
to_date('21-07-2017','DD-MM-YYYY')
等于
to_date('21-07-2017 00:00:00','DD-MM-YYYY HH24:MI:SS')
等于
trunc(to_date('21-07-2017 09:20:43','DD-MM-YYYY HH24:MI:SS'))
在我的文字里没有时间的日期是指没有时间日期指定
to_date('21-07-2017','DD-MM-YYYY')
答
这将发现这是不是在午夜的最后日期:
SELECT MAX(
CASE
WHEN your_column > TRUNC(your_column)
THEN your_column
END
)
FROM your_table
这些记录*不*有一个时间分量,它只是设置为午夜。所以你应该用'MM/DD/YYYY 00:00:00'来查看记录。 – HoneyBadger
可能会转换为字符串,然后选择min(timestamp),其中的长度(cast(timestamp as string) MiloBellano
@MiloBellano DATE **数据类型** always ** has日期和时间组件 - 如果一个值只是作为每日组件的一部分被插入,那么小时到秒的组件将默认为午夜('00:00:00')。将日期转换为字符串只会产生一个隐式调用到'TO_CHAR'使用'NLS_DATE_FORMAT'会话参数作为格式模型 - 并且将会以相同的格式对所有日期进行格式化,而不管时间分量是否为午夜 – MT0