webForumDet fria alternativet

Hämta födelsedatum

Databaser & SQL

16 svar · 421 visningar · startad av Bj

Medlem sedan sep. 2000314 inlägg
Frågan#1

Nedanstående sql har funkat fint under juni månad. Men nu, när det är mindre än 7 dagar kvar till juli så visas födelsedatumen från 1/6 - 22/7.

sql = "select * from kunder where month( fodelseDatum ) between " & month( date() ) & " and " & month( dateadd( "D", 7, date() ) ) & " and day(fodelseDatum) between " & day( now() ) & " and " & day( dateadd( "D", 7, date() ) )& _
" ORDER BY month( FodelseDatum ),day( FodelseDatum ) ASC "

Hur skall man ändra för att det fortfarande är de sju närmaste dagarnas födelsedagar som skall visas?

Medlem sedan dec. 20003 887 inlägg
#2
SELECT * FROM kunder WHERE fodelseDatum BETWEEN Date() AND DateAdd("d", 7, Date())
ORDER BY Month(fodelseDatum), Day(fodelseDatum)

Det känns onödigt att dela upp födelsedatumet i delar, när du ändå vill kontrollera mot hela datum.

red. Eller så kanske det inte är så onödigt ;) Du vill ju kolla om det är en kund som har en födelsedag de närmaste sju dagarna... Men du måste göra om fodelseDatum till att vara ett helt datum

SELECT * FROM kunder WHERE DateSerial(Year(Date), Month(fodelseDatum), Day(fodelseDatum)) BETWEEN Date() AND DateAdd("d", 7, Date())
ORDER BY Month(fodelseDatum), Day(fodelseDatum)
Medlem sedan sep. 2000314 inlägg
#3

Fick följande felmedd.
Feltyp:
Kompileringsfel i Microsoft VBScript (0x800A03EA)
Syntaxfel
main.asp, line 316, column 6
sql = SELECT * FROM kunder WHERE DateSerial(Year(Date), Month(fodelseDatum), Day(fodelseDatum)) BETWEEN Date() AND DateAdd("d", 7, Date())
-----^

Medlem sedan mars 20025 907 inlägg
#4
sql = [b]"[/b]SELECT * FROM kunder WHERE fodelseDatum BETWEEN Date() AND DateAdd("d", 7, Date()) "&_
"ORDER BY Month(fodelseDatum), Day(fodelseDatum)[b]"[/b]
Medlem sedan sep. 2000314 inlägg
#5

Satte en denna raden.
sql = "SELECT * FROM kunder WHERE fodelseDatum BETWEEN Date() AND DateAdd("d", 7, Date())
Då blev det så här....
Feltyp:
Kompileringsfel i Microsoft VBScript (0x800A0401)
Slut på programsats förväntas.
main.asp, line 316, column 75
sql = "SELECT * FROM kunder WHERE fodelseDatum BETWEEN Date() AND DateAdd("d", 7, Date())

Medlem sedan mars 20025 907 inlägg
#6

Ändrat lite, prova koden ovan igen :)

Medlem sedan dec. 20003 887 inlägg
#7

Mmm... du har glömt att avsluta sql-strängen med ett citationstecken. (")

Medlem sedan sep. 2000314 inlägg
#8

Det var då tusan....
Feltyp:
Kompileringsfel i Microsoft VBScript (0x800A0401)
Slut på programsats förväntas.
main.asp, line 317, column 75
sql = "SELECT * FROM kunder WHERE fodelseDatum BETWEEN Date() AND DateAdd("d", 7, Date()) "&_
--------------------------------------------------------------------------^

Medlem sedan dec. 20003 887 inlägg
#9

Ähh... är rad 318 fortsättning på sql-satsen? Är det så här det ska se ut kanske

sql = "SELECT * FROM kunder WHERE DateSerial(Year(Date), Month(fodelseDatum), Day(fodelseDatum))" & _
      " BETWEEN Date() AND DateAdd("d", 7, Date()) ORDER BY Month(fodelseDatum), Day(fodelseDatum)"
Medlem sedan sep. 2000314 inlägg
#10

Aarrghh... ;)

Engine; Följande felmedd......
Feltyp:
Kompileringsfel i Microsoft VBScript (0x800A0401)
Slut på programsats förväntas.
main.asp, line 318, column 30
" BETWEEN Date() AND DateAdd("d", 7, Date()) ORDER BY Month(fodelseDatum), Day(fodelseDatum)"
-----------------------------^

Ps använder mig av access databas om det skulle betyda ngn skillnad...

Medlem sedan dec. 20003 887 inlägg
#11

Åhhh... tänkte aldrig på att det var en sträng... suck!

Det ordnar sig nog om du byter citationstecknen i DateAdd("d", 7, Date()) till apostrofer: DateAdd('d', 7, Date())

Resultatet blir såhär

sql = "SELECT * FROM kunder WHERE DateSerial(Year(Date()), Month(fodelseDatum), Day(fodelseDatum))" & _
      " BETWEEN Date() AND DateAdd('d', 7, Date()) ORDER BY Month(fodelseDatum), Day(fodelseDatum)"
Medlem sedan sep. 2000314 inlägg
#12

Nu svalde den sql-satsen men fastnade på följande rad.

RecSet.Open SQL, Connect, adOpenStatic, adLockOptimistic

Verkar märkligt. Min originalrad som blivit fel vid månadsskiftet ser ut på följande vis.

'sql = "select * from kunder where month( fodelseDatum ) between " & month( date() ) & " and " & month( dateadd( "D", 7, date() ) ) & " and day(fodelseDatum) between " & day( now() ) & " and " & day( dateadd( "D", 7, date() ) )& _
'" ORDER BY month( FodelseDatum ),day( FodelseDatum ) ASC "

Men nu hamnar jag kanske i fel forum för vidare information?

Medlem sedan sep. 2000314 inlägg
#13

Har nu testat med Ditt förslag Engine

sql = "SELECT * FROM kunder WHERE DateSerial(Year(Date()), Month(fodelseDatum), Day(fodelseDatum))" & _
      " BETWEEN Date() AND DateAdd('d', 7, Date()) ORDER BY Month(fodelseDatum), Day(fodelseDatum)"

Men något måste vara galet med SQL-satsen....men vad?

Medlem sedan dec. 20003 887 inlägg
#14

Vad är det som blir galet?

Din orginalfråga blir galen, eftersom du testar månad och dag för sig.

Medlem sedan sep. 2000314 inlägg
#15

Jo nu får jag ett felmedd. som säger
Typblandningsfel i villkorsuttryck.
Det gäller raden:
RecSet.Open sql, Connect, adOpenStatic, adLockOptimistic

Detta felmeddelande kan man väl ibland få om ngt inte är helt riktigt med sql-satsen?
Skickar med hela kodsnutten så får du se det hela.

<%
Set RecSet = Server.CreateObject("ADODB.Recordset")

sql = "SELECT * FROM kunder WHERE DateSerial(Year(Date()), Month(fodelseDatum), Day(fodelseDatum))" & _
"BETWEEN Date() AND DateAdd('d', 7, Date()) ORDER BY Month(fodelseDatum), Day(fodelseDatum)"

RecSet.Open sql, Connect, adOpenStatic, adLockOptimistic

if RecSet.EOF then
response.write "Inga födelsedagar denna vecka"
else

Do Until RecSet.EOF
alder = RecSet("FodelseDatum")
response.write RecSet("Fornamn") & " " & RecSet("Efternamn") & "  " & round( DateDiff("y",alder,date())/365.2375 ) & " år den " & day(RecSet("Fodelsedatum")) &"/" & month(RecSet("Fodelsedatum")) &"<br>"

RecSet.MoveNext
Loop
end if
RecSet.Close
Connect.Close
%>
Medlem sedan dec. 20003 887 inlägg
#16

Åhå... det trilskas med datumtypen... tro om det kan gå att lösa såhär då

sql = "SELECT * FROM kunder WHERE DatePart('Y', DateSerial(Year(Date()), Month(fodelseDatum), Day(fodelseDatum)))" & _
      " BETWEEN DatePart('Y', Date()) AND DatePart('Y', DateAdd('d', 7, Date())) ORDER BY Month(fodelseDatum), Day(fodelseDatum)"
Medlem sedan sep. 2000314 inlägg
#17

Suck... samma felmeddelande...

282 ms totalt · 4 externa anrop · v20260731065814-full.a51de22e
140 ms — deklarationer (db)
0 ms — hämta statistik (cache)
138 ms — hämta tråd, inlägg och bilagor (db)
140 ms — ändringar (db)