2009-05-26 2 views

ответ

5

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

select current_timestamp from tablename 

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

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

+0

Спасибо, но с hibernate я делаю session.createSQLQuery («select current_timestamp от пользователей»), и я получаю пустой список для .list() и null для .uniqueResult(). Таблица существует. Если я помещаю несуществующую таблицу, я правильно получаю java.sql.SQLException: Таблица не найдена в инструкции [select current_timestamp from qwerty] – cherouvim

+2

- это таблица, в которой вы используете пустой? по какой-то причине я сделал пару тестов и, похоже, что если результат выбора является пустым списком, у вас нет метки времени, если результатом выбора является список строк, вы получаете столько временных меток, сколько количество строк .. – alexdown

+2

Я знаю, что это старый вопрос, но если вы хотите написать общий код (например, в библиотеке многократного использования), это не зависит от конкретной конкретной базы данных, вы можете попробовать что-то вроде: 'SELECT TOP 1 current_timestamp FROM INFORMATION_SCHEMA.SYSTEM_TABLES' – Adam

8

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

При переходе к серии 2.0, однако, вы будете иметь возможность использовать «конструктор ЗНАЧЕНИЯ» SQL-99 без опоры на одной строки связи: с

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

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

3

С 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) 
+1

+1 за отметить синтаксическую мимикрию – pilcrow

+0

Это на самом деле 'SET DATABASE SQL SYNTAX ORA TRUE'. Вам не хватало «SQL» @fredt. – BenCourliss

+0

спасибо, исправлено – fredt

19

В отборное я использую

SELECT CURRENT_DATE AS today, CURRENT_TIME AS now FROM (VALUES(0)) 
+0

Я предпочитаю это решение, так как оно не требует от меня каких-либо таблиц (для простого теста на соединение). –

3

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

CALL current_timestamp 

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