Prøv at oprette 14. januar i den tabel, du henter fra. Hvis du henter forventer data på formen dd/mm/yyyy, og SQL Serveren forventer dem i formen mm/dd/yyyy, så får du en fejlmelding.
Og for mig lugter det af, at SQL Server fortolker det som mm/dd/yyyy
Og jeg er helt enig med Danielsen med hensyn til optimalt valg af datatype. Gem som datetime og lad MSDE om håndtering/sortering osv. af datoer. Så kan du koncentrere kræfterne om at få php til at vise formatet efter ønske.
Når man bruger datetime bliver alt med sortering og gruppering af datoer meget let.
Men der opstår tre problemer; at gemme datoer i databasen, at vise datoer frem på siderne og at select'e poster fra en bestemt dato eller periode.
At gemme: Det kan gøres på mange måder, men den simpleste er at fortælle MSSQL hvilket format den kan forvente, inden man gør det, med SET DATEFORMAT:
SET DATEFORMAT dmy; INSERT INTO TableName (dtmDato) VALUES ('10-4-2005')
At vise frem på siden: De fleste måder at hente datoer på resulterer i et datoobjekt når man henter et datetime felt ud. Så du kan formatere datoen via php, asp eller hvad det nu er du bruger, med din platforms normale datofunktioner. Eller du kan få MSSQL til det: SELECT CONVERT(varchar(10), dtmDato, 105) AS strDato FROM TableName - hvor 105 er italian style: dd-mm-yyyy. Der er en helt række formater som du kan finde i dokumentationen.
At select'e: Poster fra en bestemt dato hentes sådan: SET DATEFORMAT dmy; SELECT * FROM Tablename WHERE DATEDIFF(d, dtmDato, '1-5-2004') = 0
At gemme kan håndteres nemmere, idet man kan kommunikere datoer i ISO-formatet (yyyymmdd). Herved behøver man ikke bekymre sig om datoformat, idet SQL Server ALTID vil genkende dette format korrekt uanset det aktuelle datoformat.
insert into tablename (dtmDato) values ('20050410')
for at indsætte dit eksempel.
Det er korrekt, at du kan bede SQL Serveren om at formattere datoer, men det IMHO dybt ukorrekt, da du derved besværliggør eventuelle brugerpræferencer i GUI systemet. Det bør altid være klient-koden, som sørger for formattering.
Omkring select, så er din metode fin nok - du behøver dog ikke at sætte noget datoformat, hvis du benytter ISO-formatet.
select * from tablename where datediff(d, dtmDato, '20040501') = 0
Vi blev vist enige om at datoerne står som mm/dd/yyyy i tekstfeltet, ikke? Så du skal faktisk bare gøre det du heletiden har gjort, men benytte style 101 i stedet
Ud fra de datoer, du i det indledende post har smidt ud til os, kan det IKKE entydigt afgøres, om foratet der dd/mm/yyyy eller mm/dd/yyyy!
For at vi kan hjælpe dig videre, SKAL du få oprettet en post i tabellen, hvor dagen ligger efter den 12. i en måned - f.eks. den 20. januar. Når den er på plads, kan vi diskuttere videre.
Hvis formatet entydigt er mm/dd/yyyy, skal du bruge 101 i din convert (USA). Hvis formatet entydigt er dd/mm/yyyy, skal du bruge 103 i din convert (British/French).
formatet er entydigt dd/mm/yyyy - det er mig der skriver datoerne ned i feltet med php, og tjekker via access bagefter, at det rent faktisk er det der bliver skrevet...
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.