Hej, Jag ser att du skriver varchar(8), då får inte tiden plats, öka till varchar(15) i stället Hej, Okej, det kanske vart lite oklart med hårdkodade datum och tider. Dessa används bara nu vid testning och byts senare ut mot invariabler beroende på sökningen. Man ska kunna välja ett datumintervall och tidsintervall, exempelvis: > datumet och tiden är sparade i en datetime variabel som har följande utseende: yyyy-mm-dd hh:mm:ss Tack för alla snabba svar! Det korrekta sättet för att jämföra datum är DateDiff metoden så att man slipper allt vad landsinställningar och localization heter. Sökning på datum och tid
Jag har en sökningsfunktion där man kan basera sin sökning på datumintervall och tidsintervall. Tabellen ligger på en mssql 7 server och datumet och tiden är sparade i en datetime variabel som har följande utseende: yyyy-mm-dd hh:mm:ss
Det jag inte får till är andra hälften av sql select satsen. Att köra datumet för sig verkar gå bra men inte tiden.
string sql = "SELECT * FROM " + m_TableName + " WHERE " +
"CONVERT(varchar(10),StartTime,120) >= '2005-03-07' AND " +
"CONVERT(varchar(10),StartTime,120) <= '2005-03-08' AND " +
"CONVERT(varchar(8),RIGHT(StartTime,8),120) >= '12:00:00' AND " +
"CONVERT(varchar(8),RIGHT(StartTime,8),120) <= '18:00:00'";
Sv: Sökning på datum och tid
Sv: Sökning på datum och tid
Vad försöker du uppnå? Det ser ut som om du vill hitta ett intevall som är mellan samma tidpunkt varje dag. Om det är fallet så måste jag tänka till lite.
En annan tolkning är att du har en start tid (ex. 2005-03-07 12:00:00) och en sluttid (ex. 2005-03-08 18:00:00) som du vill att data skall falla inom. I detta scenario är det bara att skriva hela datumet i formatet "yyyy-mm-dd hh:mm:ss" och göra jämförelsen. Det behövs ingen convert eftersom det är så SQL server alltid lagrar data internt.
Alltså:
string sql = "SELECT * FROM " + m_TableName + " WHERE " +
"StartTime >= '2005-03-07 12:00:00' AND " +
"StartTime <= '2005-03-08 18:00:00'";
Lycka till!
// Johan
Sv:Sökning på datum och tid
Datum: Från 2005-03-07 till 2005-03-14
Tid: Från 12:00:00 till 14:00:00
Resultatet av det skulle kunna vara:
2005-03-08 12:30:00
2005-03-12 13:50:00
Det hela bygger på en alarmlista där man vill kunna plocka ut exempelvis tre dagar i följd och se vad som hänt, säg mellan klockan 12 - 14 och utesluta resterande timmar på de dagarna.Sv: Sökning på datum och tid
Ett vanligt missförstånd. Så är det faktiskt inte. Datatypen datetime har inget format över huvud taget. Det lagras internt som ett flyttal som är antalet dagar sedan 1899-12-31. Formatet bestäms när du konverterar värdet till en sträng.
Misstaget du gör är att konvertera värdet till en sträng utan att ange vilket format som ska användas, då bestämmer serverns landsinställningar formatet. När du använder sträng-funktionen right på datumet så konverteras det automatiskt till en sträng, utan att du kan ange formatet.
Lösningen är att först konvertera värdet till en sträng och sedan använda funktionen right:
RIGHT(CONVERT(varchar(19),StartTime,120),8)Sv:Sökning på datum och tid
Görans svar fixade problemet!
Hälsningar
/MathiasSv:Sökning på datum och tid