Avatar billede d_warma Nybegynder
09. december 2004 - 16:05 Der er 23 kommentarer og
2 løsninger

MMYY vs århundreskift

Der er et eller andet tågehorn, der defineret et datofelt (mmyy) som char.
I dette felt findes selvfølgelig datoer på begge sider af det 21 århundrede.
Er der nogen nem måde at komme udenom dette på i simpel SQL?

Eksempler på data: 0298, 0303, 0179, 0104.
Jeg vil gerne have det til en normal dato selvfølgelig.

Mvh
D_Warma
Avatar billede Slettet bruger
09. december 2004 - 16:07 #1
Hvad laver du ??? : http://www.eksperten.dk/spm/569487

Du må ikke oprette det samme spørgsmål 2 gange.
se her:
http://www.eksperten.dk/regler.phtml - dem accepterede du, da du oprettede dig som bruger
Avatar billede senj Nybegynder
09. december 2004 - 16:08 #2
Kaos, nå men:
En Oracle Kolonne skal være tom for at kunne skifte type. Derfor bør du oprette en ny kolonne på din tabel defineret som DATE og så flytte dine datoer over og derpå slette den gamle chardato og så rename din nye colonne så den får den gamles navn og derpå passer ind i dine eksisterende scripts m.v.
Avatar billede Slettet bruger
09. december 2004 - 16:09 #3
d_warma >> Det her ikke en chat, men et forum. Det kunne jo være at der kom nogen forbi med et svar. Det andet spørgsmål var kun åbent i 15 min.
Avatar billede d_warma Nybegynder
09. december 2004 - 16:11 #4
phatlassen, læs svar i tidligere spg.
Jeg øgede bare points'ene. En feature til dette på eksperten ville gavne, så man ikke skulle omgå reglerne.
Avatar billede d_warma Nybegynder
09. december 2004 - 16:12 #5
phatlassen.
vil du have 30 points eller 200 point for svaret... your choice!!
Avatar billede Slettet bruger
09. december 2004 - 16:13 #6
d_warma >> Prøv at læse den kommetar i dit "gamle" spørgsmål. Den funktion findes. I stedet for at fylde databasen med en masse dobbeltspørgsmål. Regler er jo lavet, fordi der en go grund.
Avatar billede d_warma Nybegynder
09. december 2004 - 16:15 #7
senj, sorry..
Jeg sidder i en query og skal bruge det famøse datofelt som dato.
Problemet er, at når jeg konvertere det med to_date('0298','mmyy') så får jeg 01-02-2098, hvor jeg hellere ville have 01-02-1998.
Giver det mening?
Avatar billede Slettet bruger
09. december 2004 - 16:15 #8
d_warma >> Selv om du var uvidende om at denne funktion ikke fandtes, så er det da ikke en grund for at bryde reglerne ????
Avatar billede d_warma Nybegynder
09. december 2004 - 16:16 #9
phatlassen - damn, det gør den også sorry...
Avatar billede d_warma Nybegynder
09. december 2004 - 16:18 #10
phatlassen. Gjort er gjort, jeg er blevet klogere. Ikke mere chat?
Avatar billede Slettet bruger
09. december 2004 - 16:18 #11
d_warma >> helt OK - synes bare det hele gik lidt hurtigt
Avatar billede d_warma Nybegynder
09. december 2004 - 16:32 #12
selv er jeg ude i noget:
to_date(concat(substr(ANSAT_SIDEN end,1,2),
concat (case when substr(ANSAT_SIDEN,3,2) in ('00','01','02','03','04','05','06','07','08')
then '20' else '19' end) end, substr(ANSAT_SIDEN,3,2) end)),'mmyyyy')

men jeg synes bare ikke at det er pænt med in-clausen?
Avatar billede senj Nybegynder
09. december 2004 - 16:50 #13
Nej det er nok ikke holdbart i længden.

Lav en kopi kolonne eller lav et script der updater din char kolonne, så dine datoer fremstår pænt i denne.
Avatar billede arne_v Ekspert
09. december 2004 - 16:58 #14
Jeg ville prøve:

TO_DATE(felt,'mmyy')

Jeg tror faktisk at Oracle selv vil skelne mellem 19yy og 20yy fornuftigt.
Avatar billede d_warma Nybegynder
09. december 2004 - 16:59 #15
Har du noget forslag til, hvordan det kunne se ud.
Jeg er mest interesseret i, om der var nogen nem måde at komme udenom, at der ikke kan kendes forskel på 1998 og 2098?
Avatar billede arne_v Ekspert
09. december 2004 - 16:59 #16
Du kan så lave det permanent som:

UPDATE tabel SET datefelt = TO_DATE(charfelt,'mmyy')
Avatar billede arne_v Ekspert
09. december 2004 - 17:02 #17
Lidt googling abtyder at Oracle 2 digit years er 1950-2049, hvilket med
stor sandsynelighed er OK
Avatar billede arne_v Ekspert
09. december 2004 - 17:02 #18
antyder
Avatar billede d_warma Nybegynder
09. december 2004 - 17:05 #19
Hej arne,
Jeg har forsøgt, det mener jeg også at have hørt, men den oracle jeg sidder på er ikke enig med mig:
select to_date('0198','mmyy') from dual;
giver mig 01-01-2098??
Avatar billede pnielsen Nybegynder
09. december 2004 - 17:07 #20
What is the difference between the YY,RR,YYYY and RRRR format masks?

    The RR format mask was introduced as a sollution in the run up to the year
    2000. It's not explicitly a sollution for the Y2K problem but it provides
    a better way to deal with a 2-digit year around the change of a century.
    When a 4-digit year is used there can be no question what you mean. 2003 is
    always the year 2003, 1996 is always the year 1996. Therefore the format
    masks YYYY and RRRR are exactly the same.
    Potential problems arise when using a 2-digit year. "12" could mean "2012" 
    or it could mean "1912" for example. The traditional YY format mask always
    asumes that the 2 digits are the year in the "current" century. So "12" with
    a format mask of "YY" nowadays means "2012" but if the same application ran 
    in 1998 the same input would have been read as "1912".
    The 'newly' introduced format mask of "RR" shifts this cut-of point by 50
    years. Obviously you can still only define a period of 100 years with a 2
    digit number so there is no fool-proof case but this comes close.
    When using the "RR" format mask every value 00 to 49 means this same century
    as long as we're currently before year 50 as well, if we're currently after 
    year 50 a value of 00 to 49 is read as a year in the next century. The same 
    is true the other way around. If we're currently before year 50 a value of
    50 to 99 is read as the previous century and a value of 00 to 49 is read as
    the current century. So the four cases are like this:
    in 1998 a value of "05" (with format mask "RR") means 2005
    in 1998 a value of "95" (with format mask "RR") means 1995
    in 2003 a value of "05" (with format mask "RR") means 2005
    in 2003 a value of "95" (with format mask "RR") means 1995
    So by using this format mask there are no problems when the century changes.
    Obviously when RR is used as a format mask new problems will arise when
    the year 2050 comes closer so by then the format mask YY will have to be 
    used again. All in all it's a lot better to use a 4-digit year.
Avatar billede senj Nybegynder
09. december 2004 - 17:07 #21
Prøv lige at kør denne SQL
SELECT TO_DATE('0198', 'MMRR'), TO_DATE('0103', 'MMRR') FROM dual
Avatar billede d_warma Nybegynder
09. december 2004 - 17:11 #22
ja, det var jo nemt.
Det kunne være jeg skulle stille mere præcise spørgsmål første gang, så havde vi nok sparet tid.
Jeg tror, at alle der har deltaget kan se det åbentlyse svar.
Pnielsen får points for at være den første, mens senj får point for benarbejde. Er der nogen der er uenige i dette?
Avatar billede pnielsen Nybegynder
09. december 2004 - 17:16 #23
Yes yes.. .jeg forstod godt dit spørgsmål - men er først lige kommet fra arbejde.. 200 for det her er måske lige i overkanten.

Jeg arbejde faktisk i Oracle support over år 2000 skiftet og fik nok det spørgsmål her ca 100 gange :-)
Det fede var at jeg havde vagten nytårsaften til en fed hyrer - og vagttelefonen ringede kun 1 gang. Det var iøvrigt en ven der ville checke om jeg sov  :-)
Avatar billede d_warma Nybegynder
09. december 2004 - 17:20 #24
hehe...
Jeg har under skarp kritik kommet til oprette spørgmålet 2 gange, da jeg ikke var klar over afsæt flere points funktionen. Første gang med 30 points, men da der ikke var noget svar indenfor 15 min (hvilket er meget sjældent i denne kategori), så antog jeg at det var fordi det ikke var et nemt spørgmsål.
Sådan kan det jo gå..
Avatar billede pnielsen Nybegynder
09. december 2004 - 17:27 #25
Jeg har desværre ikke selv tid til at hjælpe i arbejdstiden... men skal nok hjælpe ellers...
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Computerworld tilbyder specialiserede kurser i database-management

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester