Hej! Ok, jag har forskat lite i frågan och upptäckt att sql-frågan returnerar korrekt format om man skriver följande: Du måste se till att grundinställningen för datumformat på servern är den som du vill ha. Dvs inte för din användare utan default eller för den användare som SQL Server/IIS tjänsterna är inloggade som. Okej, var ställer jag in datumformat för olika användare? Jag har bara hittat serverns inställningar under kontrollpanelen -> Nationella inställningar (eller regional settings) men där är svenska inställt. OK. Det framgick inte att du använde access, sorry. Det var tydligen bara när jag använde funktionen LEFT() som det blev konstigt. Jag provade Du har nog missuppfattat datatyper här. Jag är fullt medveten om datatyperna och i mitt senaste inlägg använde jag det förslag du precis kom med.Datumformat i databaskoppling
Jag har en webbserver som kör Windows SBS 2003 (engelsk) med IIS 6.0 med en webbsida (asp 3.0) som ansluter till en accessdatabas via ODBC. I tabellen jag hämtar information ifrån finns datum lagrade enligt formatet YYYY-MM-DD HH:MM (dvs t ex 2004-06-09 09:00).
Den informationen lades in på en äldre webbserver som hade svenskt operativsystem. Nu är det hela på engelska, vilket gör att datumfunktionerna i SQL använder engelskt format. Om jag alltså hämtar information ur de fälten, av typen date, visas de enligt engelskt format, trots att websidan i övrigt använder svenskt format (lcid = 1053).
Kan jag på något enkelt sätt ställa om så även databaskopplingen använder svenskt datumformat? Någon ODBC-inställning? Någon parameter vid anslutningen? Annars får jag programmera om de sidor som det här gäller, men det vore skönt att slippa det.
Tacksam för svar!
MVH
Johannes Jonsson,
JCH-gruppen ABSv: Datumformat i databaskoppling
SELECT Datum FROM Tabell1:
Datum:
2004-06-09 09:00
Så länge är allt bra. Men om jag bara vill ha datumet (inte tiden) använde jag tidigare följande funktion:
SELECT LEFT(Datum, 10) FROM Tabell1
vilket gav de 10 första tecknen, alltså 2004-06-09. Men nu konverteras datumet till engelskt format innan left-funktionen slår till. Det ger alltså
6/9/2004 9
istället!
Så fråga lyder:
Hur kommer jag runt det här? Finns det någon annan funktion för att bara få ut datumet ur ett datetime-värde? Jag har letat men inte hittat någon funktion för det.
Tacksam för svar.
/JohannesSv: Datumformat i databaskoppling
Ett annat alternativ är att konvertera datumet till en sträng i frågan. Exempelvis select convert(varchar(8), datum, 112) som alltid ger dig datumen i ISO-format dvs yyyymmddSv: Datumformat i databaskoppling
Problemet är ju att jag kör mot en Access-databas så jag är begränsad till Microsoft Jet SQL och då funkar inte funktionen convert.
Jag lyckades komma runt det här specifika problemet genom att skriva
SELECT CDATE(LEFT(Tabell1,LEN(Tabell1)-11))
dvs jag plockar bort tidpunkten och konverterar till datum igen och då får jag svenska formatet. CDATE returnerar alltså ett svenskt datum, men använder jag LEFT så får jag amerikanskt!
Mysko?
Även om det här funkar är det ju ingen bra all round-lösning och dessutom är det rätt osnyggt.
/JohannesSv: Datumformat i databaskoppling
Datumformat för olika användare finns i registryt, HKEY_USERS/{SID}/Control Panel/International (om de inte har flyttat på det i Win2003, jag sitter på en win2k).Sv: Datumformat i databaskoppling
FORMAT(Tabell1,'yyyy-mm-dd')
vilket fungerade perfekt, och det är dessutom stabilare.
/JohannesSv: Datumformat i databaskoppling
"Date" är en egen datatyp som precis som alla andra datatyper enbart består av binära ettor och nollor i databasen.
När du vill se innehållet i en "Date" så måste den konverteras till en textsträng som kan visas på skärmen. Denna konvertering sker (om man inte anger något annat) med hjälp av den lokala datuminställningen.
Därför får du alltid svenskt format när du gör select på ett datumfält eller resultatet av ett uttryck som resulterar i ett datum (t.ex CDate).
Om du nu istället ser på ditt andra exempel med Left.
Left är en funktion som tar en textsträng som argument och sedan returnerar ett specifikt antal tecken från denna sträng. Det går inte att göra Left på ett fält av typen date. Access är dock så snällt att det automatisk konverterar datumet till en sträng om du försöker. (dvs samma sak som om du hade skrivit Left(Str(...))). Här handlar det dock inte om att skriva ut datumfältet så därför används inte den lokala datuminställningen utan ett access standard datumformat vilket precis som du säger är den amerikanska varianten.
Det finns dock funktioner i access för att konvertera datum till textsträngar precis som du vill. Ett exempel är funktionen format.
Prova t.ex följande:
Select Format(datumfält; "short date")
eller
Select Format(datumfält; "yyyy-mm-dd")Sv: Datumformat i databaskoppling
Skälet till att jag använde LEFT() var att det fungerade utmärkt tidigare och jag därför inte funderade på att byta ut det. När problemet nu uppstod kikade jag närmare på det och konstaterade att FORMAT() gör precis det jag vill.
/Johannes