09. december 2004 - 16:05Der 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.
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.
Synes godt om
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.
phatlassen. vil du have 30 points eller 200 point for svaret... your choice!!
Synes godt om
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.
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?
Synes godt om
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 ????
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?
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?
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??
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.
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?
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 :-)
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å..
Jeg har desværre ikke selv tid til at hjælpe i arbejdstiden... men skal nok hjælpe ellers...
Synes godt om
Ny brugerNybegynder
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.