sql >> Database >  >> RDS >> Oracle

Een tijdstempel in Oracle invoegen in een specifiek formaat

U voegt geen tijdstempel in een bepaald formaat in. Tijdstempels (en datums) worden in de database opgeslagen met behulp van een interne representatie, die tussen 7 en 11 bytes ligt, afhankelijk van het type en de precisie. Daarover meer in deze vraag , onder andere.

Uw klant of toepassing bepaalt hoe de waarde wordt weergegeven in een voor mensen leesbare tekenreeks.

Wanneer je dat doet:

to_timestamp(localtimestamp,'YYYY/MM/DD')

je converteert impliciet de localtimestamp naar een tekenreeks, met behulp van de NLS-instellingen van uw sessie en deze vervolgens terug te converteren naar een tijdstempel. Dat kan incidenteel de waarde veranderen - precisie verliezen - maar zal niet veranderen hoe de waarde intern wordt opgeslagen. In uw geval leidt de mismatch tussen de NLS-instelling en het formaat dat u aanlevert tot een ORA-01830-fout.

Dus uw eerste invoeging is correct (ervan uitgaande dat u echt de sessietijd wilt, niet de servertijd). Als je wilt zien de opgeslagen waarden in een bepaald formaat, verander dan ofwel de NLS-instellingen van uw clientsessie, of formatteer het bij voorkeur expliciet wanneer u het opvraagt, bijvoorbeeld:

select to_char(time, 'YYYY-MM-DD HH24:MI:SS.FF3') from activity_log


  1. Hoe bouw ik een PDO-statement met parameters in PHP voor een dynamische query?

  2. Hoe voeg ik een maplocatie toe aan mysql varchar?

  3. Is het mogelijk om een ​​MySQL-databaseserver in te sluiten in een Java-servlet?

  4. MySQL Auto Increment Columns op TRANSACTION, COMMIT en ROLLBACK