Avatar billede mvk Nybegynder
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
%>
Avatar billede mortenbock Nybegynder
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...
Avatar billede ldanielsen Nybegynder
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?
Avatar billede ldanielsen Nybegynder
02. marts 2006 - 21:33 #3
PS:

i stedet for:

SQLDay = Day(dato)
if SQLDay < 10 then
  SQLDay = "0" & SQLDay
end if

kan du bruge:
SQLDay = Right("0" & Day(dato), 2)
Avatar billede mvk Nybegynder
21. marts 2006 - 08:12 #4
det virker. tak for hjælpen :)

point
Avatar billede ldanielsen Nybegynder
22. marts 2006 - 10:32 #5
Svar
Avatar billede mvk Nybegynder
22. marts 2006 - 11:52 #6
tak :)
Avatar billede Ny bruger Nybegynder

Din løsning...

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.

Loading billede Opret Preview
Kategori
Computerworld tilbyder specialiserede kurser i database-management

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester