我有一个给定的预言机表:
列 Datum
为 DATE
,Zeit
为 VARCHAR2
。
我必须将它们合并到一个日期并获取它们的最大(=最新)日期。我用 c# 中的 oracle reader 读取它并将它们组合起来,但为此我必须加载所有行,然后搜索最大值:
DateTime Tempdate = new DateTime();
Tempdate = Convert.ToDateTime(reader.GetValue(0).ToString());
Tempdate = Tempdate.AddHours(Convert.ToDateTime(reader.GetValue(1).ToString()).Hour);
Tempdate = Tempdate.AddMinutes(Convert.ToDateTime(reader.GetValue(1).ToString()).Minute);
Tempdate = Tempdate.AddSeconds(Convert.ToDateTime(reader.GetValue(1).ToString()).Second);
如何在 SQL 语句中完成此操作,以便我只获取具有最新日期的行?
最佳答案
您可以在时间组件上使用TO_DATE()
:
SELECT datum + ( TO_DATE( zeit, 'HH24:MI:SS' ) - TRUNC( TO_DATE( zeit, 'HH24:MI:SS' ) ) )
FROM table_name
然后,要获得最大值,您可以在此计算值上使用 MAX()
,或者考虑到可以使用日期/字母数字顺序比较这些值(假设时间分量不存在)超过23:59:59
)你可以先找到最大值:
SELECT datum,
zeit
FROM (
SELECT datum,
zeit,
ROW_NUMBER() OVER ( ORDER BY datum DESC, zeit DESC ) AS rn
FROM table_name
)
WHERE rn = 1
这可以使用表上的任何索引。
然后在这一行上使用我的第一个查询(或 @AlexPoole 的 TO_DSINTERVAL()
解决方案)。
关于sql - 合并日期和时间并获取最新的日期时间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37590062/