[ORACLE] Alleen de tijd in een kolom registreren

Pagina: 1
Acties:
  • 348 views sinds 30-01-2008
  • Reageer

  • TweakersOnly
  • Registratie: September 2000
  • Laatst online: 21:35
Ik heb een tabel waarin in een kolom een tijdstip moet worden geregistreerd. De registratie hiervan gaat goed, hiervoor heb ik de onderstaande code gebruikt:

SQL:
1
2
sql = "insert into tabelnaam values ( " & _
   "to_date('22:00:39','HH24:MI:SS') , 'test' )


De kolom is binnen oracle als volgt gedefinieerd

code:
1
2
3
create table tabelnaam (
tijdstip date not null , 
tekst varchar(50) )


Als ik nu een selectie op de kolomnaam uitvoer, dan krijg ik echter geen tijdstippen maar datums te zien. :? Hoe kan ik alsnog de tijden te voorschijn toveren?

  • whoami
  • Registratie: December 2000
  • Laatst online: 21-08 22:54
De waarde ophalen, en enkel de tijd laten zien.

https://fgheysels.github.io/


  • TweakersOnly
  • Registratie: September 2000
  • Laatst online: 21:35
whoami schreef op 10 July 2003 @ 22:15:
De waarde ophalen, en enkel de tijd laten zien.
Dat werkt dus niet, als ik een select-query uitvoer krijg ik alleen de datums te zien.

SQL:
1
select tijd from tabelnaam where rownum = 1 order by tijd


levert bijvoorbeeld op '10-07-03'. M.a.w. de tijd wordt helemaal niet getoond.

  • whoami
  • Registratie: December 2000
  • Laatst online: 21-08 22:54
In de taal die je gebruikt (PHP, C#, whatever) kan je de tijd er toch uitfilteren?

In C# kan je bv :
code:
1
DateTime.Now.TimeOfDay;

doen.

(Dat kan je daar dus dan op iedere DateTime doen).

[ Voor 16% gewijzigd door whoami op 10-07-2003 22:20 ]

https://fgheysels.github.io/


  • ACM
  • Registratie: Januari 2000
  • Niet online

ACM

Software Architect

Werkt hier

Kijk es in de manual van oracle of een date-field uberhaupt wel de tijd opslaat? Moet je er niet een datetime/timestamp voor hebben? en als je alleen in het tijdstip geinteresseerd bent en niet in de datum, moet je dan geen time-veld hebben?

Verder kent oracle ook nog een to_char methode die min-of-meer het omgekeerde is van de to_date, daar kan je de output verder mee formateren indien nodig.

[ Voor 25% gewijzigd door ACM op 10-07-2003 22:25 ]


  • TweakersOnly
  • Registratie: September 2000
  • Laatst online: 21:35
ACM schreef op 10 July 2003 @ 22:24:
Kijk es in de manual van oracle of een date-field uberhaupt wel de tijd opslaat? Moet je er niet een datetime/timestamp voor hebben? en als je alleen in het tijdstip geinteresseerd bent en niet in de datum, moet je dan geen time-veld hebben?
Oracle kent geen time-veld, als je een tijd wilt opslaan moet je het veld toch als een datumveld definieren. Een insert query, zie de eerste post, wordt zonder problemen door Oracle geaccepteerd. Je zou dus verwachten dat de tijd succesvol naar de database wordt weggeschreven. 't Is alleen raar dat je 'm daarna met een standaard select-query niet meer te zien krijgt.

  • whoami
  • Registratie: December 2000
  • Laatst online: 21-08 22:54
TweakersOnly schreef op 10 July 2003 @ 22:27:
[...]

Oracle kent geen time-veld, als je een tijd wilt opslaan moet je het veld toch als een datumveld definieren.
Zoals ACM al zegt, slaat een Date veld geen tijd op.
Een DateTime veld slaat wel een Datum en een tijd op.

https://fgheysels.github.io/


Verwijderd

Oracle slaat wel degelijk de tijd op in een datum kolom.

De tijd kun je dan ophalen met een to_char met het format mask voor tijd:

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
SQL> create table tabelnaam (
  2  tijdstip date not null , 
  3  tekst varchar(50) )
  4  /

Table created.

SQL> insert into tabelnaam( tijdstip ) values ( sysdate )
  2  /

1 row created.

SQL> select to_char( tijdstip, 'HH24:MI:SS' ) from tabelnaam
  2  /

TO_CHAR(
--------
15:26:23

SQL>

Verwijderd

Verwijderd schreef op 11 July 2003 @ 15:26:
Oracle slaat wel degelijk de tijd op in een datum kolom.

De tijd kun je dan ophalen met een to_char met het format mask voor tijd:

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
SQL> create table tabelnaam (
  2  tijdstip date not null , 
  3  tekst varchar(50) )
  4  /

Table created.

SQL> insert into tabelnaam( tijdstip ) values ( sysdate )
  2  /

1 row created.

SQL> select to_char( tijdstip, 'HH24:MI:SS' ) from tabelnaam
  2  /

TO_CHAR(
--------
15:26:23

SQL>
Dit is inderdaad de oplossing. Als alternatief kan je ook een VARCHAR2 kolom aanmaken waarin je de timestamp als tekst opslaat. Is maar net wat handiger is, dwz waar je die timestamp voor gebruikt.

  • JaQ
  • Registratie: Juni 2001
  • Nu online

JaQ

We hebben het over Oracle.

Oracle kent maar 1 datum type en dat is date. Date is ALTIJD een datum en tijdstip. Als je dus enkel de tijd wilt selecteren moet je select to_char(kolom, 'HH24:MI:SS') from tabel doen. Alleen de tijd opslaan in een dateveld is onmogelijk.

Als je dus de sysdate in een datum veld opslaat, kan je altijd de datum en tijd hieruit extraheren.

edit:
er waren er dus toch al meer..

[ Voor 11% gewijzigd door JaQ op 11-07-2003 16:22 ]

Egoist: A person of low taste, more interested in themselves than in me

Pagina: 1