В настоящее время я использую MyTimeStampField-TRUNC(MyTimeStampField) для извлечения части времени из столбца метки времени в Oracle.
MyTimeStampField-TRUNC(MyTimeStampField)
SELECT CURRENT_TIMESTAMP-TRUNC(CURRENT_TIMESTAMP) FROM DUAL
Это возвращает
+ 00 13: 12: 07.100729
Для меня это нормально, извлекать часть времени из поля метки времени, но мне интересно, есть ли лучший способ (возможно, использование встроенной функции ORACLE) сделать это?
Вы всегда можете сделать что-то вроде:
select TO_DATE(TO_CHAR(SYSDATE,'hh24:mi:ss'),'hh24:mi:ss') from dual
Я считаю, что это будет работать и с временными метками.
А как насчет функции EXTRACT () ?
Вы хотите просто дату, затем используйте
to_char(cast(SYSDATE as date),'DD-MM-YYYY')
и если вы хотите просто время, используйте
to_char(cast(SYSDATE as date),'hh24:mi:ss')
параметры вносят все изменения
'DD-MM-YYYY'
и
'hh24:mi:ss'
Это дает метку времени на 1 час меньше, чем фактическая.
Это может помочь:
Select EXTRACT(HOUR FROM (SYSDATE - trunc(sysdate)) DAY TO SECOND ) From dual;
select hour(CURRENT_TIMESTAMP)
Я думаю, что рассматриваемый метод короче и быстрее, чем в обоих ответах. Потому что он включает в себя только две математические операции и не требует сложного анализа, форматирования и преобразования.