Как сделать select current_timestamp в hsqldb?

Оракул:

select systimestamp from dual

MySQL:

select current_timestamp

SQL-сервер:

select current_timestamp

Постгрес SQL:

select current_timestamp

Вопрос в том, как я могу получить текущую метку времени в HSQLDB? Я использую версию 1.8.0.10


person cherouvim    schedule 26.05.2009    source источник


Ответы (5)


Ты можешь написать

select current_timestamp from tablename  

где tablename — это реальная таблица в вашей базе данных.

Результатом запроса является только текущая метка времени.

person alexdown    schedule 26.05.2009
comment
Спасибо, но с спящим режимом я делаю session.createSQLQuery(выберите current_timestamp от пользователей) и получаю пустой список для .list() и null для .uniqueResult(). Таблица существует. Если я помещу несуществующую таблицу, я правильно получу java.sql.SQLException: таблица не найдена в выражении [выберите current_timestamp из qwerty] - person cherouvim; 26.05.2009
comment
таблица, которую вы используете, пуста? по какой-то причине я сделал пару тестов и кажется, что если результатом выбора является пустой список, у вас нет метки времени, если результатом выбора является список строк, вы получаете столько же меток времени, сколько количество рядов.. - person alexdown; 27.05.2009
comment
Я знаю, что это старый вопрос, но если вы хотите написать общий код (например, в библиотеке многократного использования), который не зависит от конкретной конкретной базы данных, вы можете попробовать использовать что-то вроде: SELECT TOP 1 current_timestamp FROM INFORMATION_SCHEMA.SYSTEM_TABLES - person Adam; 13.02.2011
comment
Если таблица может быть пустой, вам нужно обернуть временную метку максимальной агрегацией и объединить: select coalesce(max(current_timestamp()), current_timestamp()) from tablename - person Harald Brabenetz; 02.07.2013

В выборе я использую

 SELECT CURRENT_DATE AS today, CURRENT_TIME AS now FROM (VALUES(0))
person jeanlou1370    schedule 03.07.2011
comment
Я предпочитаю это решение, поскольку оно не требует наличия каких-либо таблиц (для простого теста соединения). - person Peter Walser; 25.04.2016
comment
Я нашел этот ответ более полезным. Моя цель состояла в том, чтобы просто сделать простой оператор select для проверки синтаксиса. Большинство реализаций SQL допускают это без предложения FROM. Это была отличная работа. - person Brian; 24.07.2020

ответ @alexdown совершенно правильный - в версии 1.8 для этого требуется однострочное отношение, например, таблица Oracle DUAL или таблица InterBase/Firebird RDB$DATABASE.

Однако при переходе к серии 2.0 вы сможете использовать «конструктор VALUES» SQL-99, не полагаясь на однострочное отношение:

sql> VALUES (current_timestamp);
2010-04-22 15:22:40.997

Если вам нужно переименовать столбец из значений по умолчанию для конкретного поставщика, которые выбирает VALUES, вы всегда можете использовать выбор: SELECT * FROM (VALUES (current_timestamp)) v(my_new_name)

person pilcrow    schedule 22.04.2010

Вы можете использовать

CALL current_timestamp

чтобы получить текущую метку времени. Согласно обсуждению в списке рассылки HSQL, это намного эффективнее, чем фиктивный выбор из INFORMATION_SCHEMA.SYSTEM_TABLES.

person Thilo-Alexander Ginkel    schedule 03.08.2011

С HSQLDB 2.1 и более поздних версий у вас есть все возможности.

С помощью свойства подключения hsqldb.syntax_ora, hsqldb.syntax_pgs, hsqldb.syntax_mss или hsqldb.syntax_mys=true вы можете использовать формы, поддерживаемые другими базами данных. Эквивалентный SQL - SET DATABASE SQL SYNTAX ORA TRUE, и аналогичный для других диалектов.

Нативная форма SQLStandard, поддерживаемая HSQLDB во всех режимах, такова:

VALUES (CURRENT_TIMESTAMP)
person fredt    schedule 17.04.2011
comment
На самом деле это SET DATABASE SQL SYNTAX ORA TRUE. Вам не хватало SQL @fredt. - person BenCourliss; 10.10.2012