19. juli 2002 - 13:41Der er
18 kommentarer og 2 løsninger
MSSQL, asp og dato
Hejsa.
Det velkendte datoproblem optræder igen, men denne gang har jeg svært ved at forstå det.
MSSQL-serveren kører med dansk datoformat dd-mm-åååå, men hvis jeg via SQL skal indsætte,sammenligne eller lign. skal den have formatet mm-dd-åååå?
Hvis jeg sætter den ind i det format, og trækker den ud igen (så det virker, ellers får jeg fejl om "conversion to smalldatetime") får jeg den tilbage som dd-mm-åååå?
Jeg har prøvet med local id, men det har tilsyneladende ingen effekt.
Der bliver investeret massivt i AI. Teknologien er mere tilgængelig end nogensinde, og ambitionerne er høje. Alligevel oplever mange virksomheder, at resultaterne udebliver.
locale id styrer, hvordan datoerne håndteres af dit scriptsprog, fx VBScript, derfor bør den sættes. Ellers er det serverens locale, der kommer til at styre, hvordan scriptsprogets indbyggede funktioner opfatter datoer. SQL skal have datoer i amerikansk format (mm-dd-åååå) med # før og efter. Husk at når du bygger et SQL-statement, er det en tekststreng.
neteffect -> hvad er forskellen (for en komputer) på mm-dd-åååå og dd-mm-åååå (02-01-2001 og 02-01-2001) ?
Det kræver jo så at sqlserveren/webserver er sat op til at benytte Amerikansk dato format MM-DD-YYYY (SQL dato format ER YYYY-YY-MM, og det er også kun sådan at fx. mySQL vil have datoer)
input i databasen? (skal jo være yyyy-mm-dd) output = på siden (bliver formateret efter dine serverindstillinger (webserveren hvis det er 2 forsk (control panel->regional options->set default-> vælg dansk ))
-> a1: SQL skal altid have det på amerikansk. Databasen må selv om, hvordan den gemmer en dato, som den har fået via SQL. Jeg mener ikke serveren påvirker databasens håndtering af datoer, men det kan i nogle tilgælde sættes for databasen selv. Jeg vil anbefale at køre 100% amerikansk. Også for scripts (asp: Session.LCID = 1033). Derved bliver dansk format reduceret til et spørgsmål om præsentation, hvor konvertering fra/til amerikansk format klares med scriptede rutiner.
tåge..... har du læst (prøvet og forstået) hvad jeg skrev
2002-09-11 kan KUN være amerikansk (11. september 2002) 09-11-2002 kan både være 9. november eller 11. september 2002
databasen kan man godt indstille til at tage dk format (dd-mm-yyyy), men default er us'sk. (og så har man jo et problem, hvis man har lavet det til us'sk....)
-> a1. Nej, jeg har ikke læst det hele. Men jeg har gjort rede for, hvordan jeg får det til at virke i mine egne løsninger. Her er betingelserne, at jeg kender databasen, for den uploader jeg selv, men jeg kan ikke bestemme serverens locale. Desuden laver jeg ofte løsninger, hvor brugergrænsefladen skal skifte mellem engelsk og dansk. Derfor er det iøvrigt heller ikke hensigtsmæssigt at have dansk sortering i databasen.
Standard ANSI/ISO SQL-92 has a full specification for dates and times that are based on ISO-8601 standards and should have no Year 2000 problems. This standard requires the "yyyy-mm-dd" format and 24-hour time formats based on the UTC (Universal Coordinated Time, formerly the GMT or Greenwich Mean Time) and has a lot of details in it.
-> neteffect du siger.... SQL skal have datoer i amerikansk format (mm-dd-åååå) med # før og efter. (det der med # dur ikke på sql server, men kun i access?)
dansk eller amerikans sortering giver vel det samme (en dato kommer efter den anden ( også i amerika), det format databasen leverer datoerne i er det som der står i control panel (control panel->regional options->set default-> vælg dansk )
Der er mig bekendt ikke nogen indbygget funktion til det, hverken i VBScript eller JavaScript. VBScript har funktionen DatePart til at trække elementer ud fra det interne format.
Jeps, jeg er gået i gang med at skrive en kæææmpe funktion, der kan klare problemet (Det er jo trods alt bare at omarrangere på enhederne i datoen) ;-)
Et råd: I stedet for en kæmpefunktion, så lav dig en samling småfunktioner, som hver især tager deres del af problemstillingen. Jeg kan også anbefale, at du laver to sæt af disse funktioner, nemlig ét sæt til at håndtere datoer alene og ét sæt til at håndtere dato og klokkeslet sammen (AM/PM, you know)
Men jeg ville lave en funktion (i asp) der returnerer datovariablen i yyyy-mm-dd format (så virker det også hvis det er andet end en sqlserver storedprocedure)
Jeg har også omgået problemet på den måde før, men ville høre om der var nogen, som havde en bedre løsning, men ak :(
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.