02. marts 2006 - 16:31
Der 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
%>
02. marts 2006 - 17:00
#1
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")) & "# "
Eller noget i den stil...
02. marts 2006 - 21:32
#2
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?