11. maj 2005 - 15:14Der er
7 kommentarer og 2 løsninger
Problemer med datetime felt (smalldatetime)
Jeg er ved at flytte en database fra én server, til en anden.
På serveren som jeg overfører TIL synes jeg 'smalldatetime' felterne er blevet sære! Formater ser således ud, hvis jeg bruger Query Analyzeren: 2004-09-30 00:00:00 Altså er datoformatet: YYYY-MM-DD
Kan der være en eller anden indstilling på serveren der afgør hvordan formatet skal være.
Jeg har noget asp kode der laver en SELECT hvor der søges efter datoer med dette format: DD-MM-YYYY. asp kodne kan godt køre på den "gamle" server, men ikke på den nye - fordi datoformatet nu tilsyneladende er forkert.
ja og nej.. formattet DD-MM-YYYY er ikke videre smart at bruge. Du kan eks.vis ikke sortere på det... det kan du på YYYY-MM-DD
Og du kan altid bruge (i mine øjne et korrekt) datoformat igennem din ASP - her skal du huske at starte dine sider med session.lcid sådan at du ikke sidder og koder op imod serverens indstillinger. Hvis du ikke bruger LCID vil du hurtigt alligevel komme ud for problemer, eks.vis hvis regional settings på webserveren ændres - det kunne ske ved en reinstallation. Grunden til at du oplever det du gør er pga. IIS's regional settings og har altså heller intet at gøre med Regional Settings på serveren. Hvis du vil ændre det efter IIS installationen skal det gøres igennem din registry - søg evt. på Google, mange sidder med dateformat iis probs ligesom dig.
Men drop alt det fis.... Derfor vil jeg anbefale at gå over til som sagt LCID og bruge det mere generelle datoformat. Udover det.. som så mange herinde nævner og tror, så vil jeg altså gerne lige skære ud i pap at datoformatet på sqlserveren ikke ændres vha. collation. Den eneste måde du kan ændre det på er vha. SET DATEFORMAT ved hver forespørgsel!!
Janus_007: Nu er problemet bare at jeg har en MASSE .asp kode der skal flyttes fra én server til en anden server. Og jeg vil helst bare løse problemet i registreringsdatabasen - hvis det kan lade sig gøre.
Jeg har søgt lidt efter det med registreringsdatabasen, men jeg har ikke funget nålen endnu... Alle steder i min registreringsdabase er formatet for sShortDate = dd-MM-yyyy, hvilket jo burde være ok - og BURDE give det rigtige resultat - men det gør det ikke...
idag = year(date()) & "-" & month(date()) & "-" & day(date()) SELECT * FROM tabel1 WHERE dato = '"&idag&"'
Det bliver til: SELECT * FROM tabel1 WHERE dato = '2005-05-12'
En anden ting du kunne gøre var eks.vis at bruge SET DATEFORMAT, altså noget i retning af:
SET DATEFORMAT ymd; SELECT * FROM tabel1 WHERE dato = '12-05-2005'
Eller evt. denne her (som jeg ikke mener er videre performancegod)
SELECT * FROM tabel1 WHERE convert(varchar, dato, 105) = '12-05-2005' , men hvis du bare skal have flyttet lidt data eller det er meget begrænset anvendelse så pyt da :O)
Det kan desværre ikke lade sig gøre, og jeg vil råde dig til altid at udvikle op imod ansi standarder og ikke noget dansk/ norsk/ svensk snask.. Det kan hurtigt give problemer :O)
janus_007 > Hvad mener du med ast man ikke kan sortere på datetime hvis formatet er ...
ORDER BY dtmDato giver altid korrekt rækkefølge, uanset hvad.
swift > Det du skulle have gjort, og måske kan gøre nu, er at lave en funktion der konverterer en dato til en streng. Læg den i en fil som du includer på de sider du skal bruge den, og derefter skal du kun rette det ét sted, hvis det skulle ske igen.
Function ConvertDateToSqlString(dtmDateInput) ConvertDateToSqlString = year(dtmDateInput()) & "-" & month(dtmDateInput()) & "-" & day(dtmDateInput()) End Function
- eller hverdan du nu vil have det.
Bruges sådan:
strSQL = "SELECT * FROM tabel1 WHERE dato = '" & ConvertDateToSqlString(Date()) & "'"
ldanielsen-> Du kan naturligvis sortere på sqlserveren, hvis du nu ellers tog og læse det jeg havde skrevet så ville det også være klart for dig i i og med jeg flere gange nævner at collation ikke påvirker dateformatet på sqlserveren.
Udover det så har den funktion jo slet ikke noget med sagen at gøre, det er jo slet ikke problemet... hvilket også burde være klart hvis du ellers læste hele tråden. Om det skrives direkte eller kaldes vha. en funktion er ret ligegyldigt i den her situation.
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.