02. marts 2006 - 16:31Der er
5 kommentarer og 1 løsning
Dato mindre end - dato søgning
jeg prøver at lave et udtræk hvor datoen er før den jeg har søgt på men den finder ikke noget selv om jeg ved der er records:
"SELECT SUM(RecourseAmount) AS PrimoRecourse, SUM(RecourseReceivedAmount) AS PrimoReceived FROM tblClaims WHERE DateOfDamage < '" & ConvertToSqlDate(Request.Querystring("startdate")) & "' "
convert: <% Session.LCID= 1030 Function ConvertToSqlDate(dato) dim SQLYear,SQLMonth,SQLDay SQLYear = Year(dato) SQLMonth = Month(dato) SQLDay = Day(dato) if SQLDay<10 then SQLDay = 0&SQLDay end if if SQLMonth<10 then SQLMonth = 0&SQLMonth end if ConvertToSqlDate = SQLMonth&"-"&SQLDay&"-"&SQLYear End Function %>
Med kunstig intelligens skaber HP’s nye OmniBook X 14 en unik og skræddersyet brugeroplevelse målrettet dem, der ønsker høj ydeevne og intelligente funktioner
Er der ikke noget med at der skal # omkring datoer i select sætninger?
"SELECT SUM(RecourseAmount) AS PrimoRecourse, SUM(RecourseReceivedAmount) AS PrimoReceived FROM tblClaims WHERE DateOfDamage < #" & ConvertToSqlDate(Request.Querystring("startdate")) & "# "
Først skal du prøve at udskrive din sqlstreng så vi kan se hvad resultatet er. Det skulle gerne ligne:
SELECT SUM(RecourseAmount) AS PrimoRecourse, SUM(RecourseReceivedAmount) AS PrimoReceived FROM tblClaims WHERE DateOfDamage < '01-03-2006'
Og nej, det er Access der skal have # omkring datoer.
Næste spørgsmål er om MSSQL læser datoen rigtigt. Den ser en streng, og oversætter den til en dato. Afhængig af opsætning læser den nemlig datoer forskelligt, og hvis den gør det, tror den at du mener 3. januar, og ikke 1. marts, i mit eksempel. Du kan prøve dig frem, men 'yyyy/mm/dd' er altid et godt bud.
En anden løsning er at anvende CONVERT, så¨det er dig selv der oversætter strengen til en dato, for så kan du styre det:
... WHERE DateOfDamage < CONVERT(smalldatetime, '01-03-2006', 105)
En tredje løsning er at starte med at køre
SET DATEFORMAT dmy
Det fortæller MSSQL hvilken rækkefølge den får tingene i. Det er bare ikke altid muligt eller praktisk, men prøv:
"SET DATEFORMAT dmy; SELECT SUM(RecourseAmount) AS PrimoRecourse, SUM(RecourseReceivedAmount) AS PrimoReceived FROM tblClaims WHERE DateOfDamage < '" & ConvertToSqlDate(Request.Querystring("startdate")) & "' "
Endelig skal jeg lige sikre mig at DateOfDamage er datetime eller smalldatetime, ellers er problemet meget større. Det er det vel?
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.