Šta je novo?

SQL DATA TYPES

Učlanjen(a)
04.12.2005
Poruke
314
Poena
319
trenutno pravim neke tabele i imam problem sa varijabilama koje treba da pokazu vreme i datum. treba mi data type koji ce da prikaze vreme i datum na ovaj nacin:

hh:mm mm-dd-yyyy

hvala ..
 
DateTime nema prikaz zakucan vec se to regulise prilikom ispisa... barem kod "ozbiljnijih" vendora...
 
Što kaže Mare, ti bi to trebao da konvertuješ kasnije, prilikom ispisa, u backend kodu aplikacije. Mada možeš da promeniš način kako se storuje u ćeliju.

Kod napisao kolega Vojo. Zašto? Zato što mu se može.
Kod:
DECLARE @datum DATETIME
SET @datum = SYSDATETIME()
SELECT CAST(DATEPART(HH,@datum) AS VARCHAR(5))+':'+ CAST(DATEPART(MINUTE,@datum) AS VARCHAR(5))+' '+ CAST(MONTH(@datum) AS VARCHAR(20))+'-'+CAST(DAY(@datum) AS VARCHAR(10))+'-'+CAST(YEAR(@datum) AS VARCHAR(10))
 
Poslednja izmena od urednika:
Ok, ovaj kod mi je jasan samo da li je ovo kod za query ili kad pravim tabelu?

mislim da je za query, tako da koji data type da stavim za tu variabilu prilikom pravljenja tabele?
 
Marko, i dalje se zanimaš Oracle-om?

Datum i vreme smesti u DATE kolonu.
Ispis vrednosti DATE kolone, ako uradiš select date_fld from table_001; gde je date_fld tipa DATE, je regulisan NLS_DATE_FORMAT promenljivom.
Možeš je definisati u shell-u iz koga pokrećeš program koji će napraviti Oracle sesiju:

export NLS_DATE_FORMAT="hh24:mi mm-dd-yyyy"
ili ako ti je sesija već aktivna: alter session set NLS_DATE_FORMAT='hh24:mi mm-dd-yyyy'

Na ovaj način menjaš kako će ti DATE polje po defaultu biti prezentovano.

Ako želiš eksplicitno da formatiraš DATE polje - koristiš to_char():

select to_char(date_fld, 'yyyy-mm-dd hh24:mi:ss') from table_001; - vratiće ti datum u formatu 2012-03-28 17:03:00
select to_char(date_fld, 'dd-mm-yyyy') from table_001; - vratiće ti datum u formatu 28-03-2012

edit:
Ovim samo konvertuješ DATE u string i formatiraš ga po želji. Način na koji je DATE zaista zapisan u tabeli ne može da promeniš. Nisam siguran koji se format koristi - mislim da se beleži broj sekundi od epohe.
 
Poslednja izmena:
Što kaže Mare, ti bi to trebao da konvertuješ kasnije, prilikom ispisa, u backend kodu aplikacije. Mada možeš da promeniš način kako se storuje u ćeliju.

Kod napisao kolega Vojo. Zašto? Zato što mu se može.
Kod:
DECLARE @datum DATETIME
SET @datum = SYSDATETIME()
SELECT CAST(DATEPART(HH,@datum) AS VARCHAR(5))+':'+ CAST(DATEPART(MINUTE,@datum) AS VARCHAR(5))+' '+ CAST(MONTH(@datum) AS VARCHAR(20))+'-'+CAST(DAY(@datum) AS VARCHAR(10))+'-'+CAST(YEAR(@datum) AS VARCHAR(10))

Ili jos lepse nemoj nista sam da konvertujes, napravi aplikaciju "svesnom" regionalnih setovanja i pusti sitem da odredi format ispisa kako to korisnik verovatno zeli u svim aplikacijama da vidi...
 
Mislim da je Nemanja taj kod okačio kao primer kako ne treba raditi. Kolega Vojo očigledno nije upoznat sa DATE_FORMAT() MySQL funkcijom (ili voli da piše komplikovan kod). 🙂
 
Poslednja izmena:
Da, Da.. zanimam se.. ne odustajem!!

hvala , odradio sam na ovaj nacin i radi. THX zeleni zube a i ostali.

Marko, i dalje se zanimaš Oracle-om?

Datum i vreme smesti u DATE kolonu.
Ispis vrednosti DATE kolone, ako uradiš select date_fld from table_001; gde je date_fld tipa DATE, je regulisan NLS_DATE_FORMAT promenljivom.
Možeš je definisati u shell-u iz koga pokrećeš program koji će napraviti Oracle sesiju:

export NLS_DATE_FORMAT="hh24:mi mm-dd-yyyy"
ili ako ti je sesija već aktivna: alter session set NLS_DATE_FORMAT='hh24:mi mm-dd-yyyy'

Na ovaj način menjaš kako će ti DATE polje po defaultu biti prezentovano.

Ako želiš eksplicitno da formatiraš DATE polje - koristiš to_char():

select to_char(date_fld, 'yyyy-mm-dd hh24:mi:ss') from table_001; - vratiće ti datum u formatu 2012-03-28 17:03:00
select to_char(date_fld, 'dd-mm-yyyy') from table_001; - vratiće ti datum u formatu 28-03-2012

edit:
Ovim samo konvertuješ DATE u string i formatiraš ga po želji. Način na koji je DATE zaista zapisan u tabeli ne može da promeniš. Nisam siguran koji se format koristi - mislim da se beleži broj sekundi od epohe.
 
Nazad
Vrh Dno