2009-05-26 10 views

risposta

5

È possibile scrivere

select current_timestamp from tablename 

dove tablename è una vera e propria tabella nel database.

Il risultato della query è solo il timestamp corrente.

+0

Grazie, ma con ibernazione faccio session.createSQLQuery ("seleziona current_timestamp dagli utenti") e ottengo la lista vuota per .list() e null per .uniqueResult(). Il tavolo esiste. Se metto una tabella inesistente, ottengo correttamente java.sql.SQLException: tabella non trovata nell'istruzione [select current_timestamp from qwerty] – cherouvim

+2

è la tabella che stai usando vuota? per qualche motivo ho fatto un paio di test e sembra che se il risultato della selezione è una lista vuota, non hai il timestamp, se il risultato della selezione è un elenco di righe, ottieni il numero di timestamp del numero di righe.. – alexdown

+2

So che questa è una vecchia domanda, ma se si desidera scrivere codice generico (ad esempio in una libreria riutilizzabile), che non dipende da un database specifico specifico, si può provare a utilizzare qualcosa come: 'SELECT TOP 1 current_timestamp FROM INFORMATION_SCHEMA.SYSTEM_TABLES' – Adam

8

@alexdown's answer è giusto - sotto 1.8 è necessario un rapporto one-fila per fare questo, come Oracle di DUAL o InterBase/Firebird RDB$DATABASE tavolo.

Quando si sposta alla serie 2.0, tuttavia, sarete in grado di utilizzare lo SQL-99 "VALORI costruttore" senza fare affidamento su un rapporto uno-fila:

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

Se è necessario rinominare la colonna dalle impostazioni predefinite specifiche del fornitore selezionate da VALUES, è sempre possibile utilizzare una selezione: SELECT * FROM (VALUES (current_timestamp)) v(my_new_name)

3

Con HSQLDB 2.1 e versioni successive sono disponibili tutte le opzioni.

Con il hsqldb.syntax_ora proprietà di connessione, hsqldb.syntax_pgs, hsqldb.syntax_mss o hsqldb.syntax_mys = true è possibile utilizzare i moduli supportati da altri database. L'equivalente SQL è SET DATABASE SQL SYNTAX ORA TRUE e simile per altri dialetti.

Il nativo, modulo SQLStandard, sostenuta da HSQLDB in tutte le modalità è questo:

VALUES (CURRENT_TIMESTAMP) 
+1

+1 per notare il mimetismo della sintassi – pilcrow

+0

In realtà 'SET DATABASE SQL SYNTAX ORA TRUE'. Ti mancava il "SQL" @fredt. – BenCourliss

+0

grazie, corretto – fredt

19

In un prescelto io uso

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

Preferisco questa soluzione in quanto non richiede che abbia tabelle (per un test di connessione semplice). –

3

È possibile utilizzare

CALL current_timestamp 

per recuperare il timestamp attuale. Secondo una discussione sulla mailing list HSQL, questo è molto più efficiente di una selezione fittizia da INFORMATION_SCHEMA.SYSTEM_TABLES.