Avatar billede axkris Nybegynder
17. september 2005 - 10:59 Der er 7 kommentarer og
1 løsning

Problemer med dato

Hej alle

Den siger:

Invalid operator for data type. Operator equals subtract, type equals varchar.

strSQL = "SET DATEFORMAT YMD INSERT INTO " & strMemberTablePrefix & "IPLIST (IPLIST_MEMBERID, IPLIST_STARTIP, IPLIST_STARTDATE, IPLIST_ENDDATE, IPLIST_STATUS) VALUES ('" & RS("M_NAME") & "', '" & RS("M_LAST_IP") & "', ' + replace(getDate(), '-', '') + 000000', ' + replace(getDate() + 365, '-', '') + 000000', 0)"

DEt virker, undtagen det at gemme datoen, som skal formatetes i: År, måned dato, hvor -tegnet fjernes og så skal der indsætte 6 nuller, så outputtet bliver (f.eks. for i dag): 20050917000000

Kan du hjælpe?
Avatar billede axkris Nybegynder
17. september 2005 - 13:12 #1
Nå, jeg løste det med noget halv grimt vb-kodning i stedet:

strSQL = "INSERT INTO " & strMemberTablePrefix & "IPLIST (IPLIST_MEMBERID, IPLIST_STARTIP, IPLIST_STARTDATE, IPLIST_ENDDATE, IPLIST_STATUS) VALUES ('" & RS("M_NAME") & "', '" & RS("M_LAST_IP") & "', '" & Year(Date()) & Right("00" & month(date()), 2) & Right("00" & day(date()), 2) & "000000', '" & (Year(Date()) + 1) & Right("00" & month(date()), 2) & Right("00" & day(date()), 2) & "000000', 0)"

Men er der nogle, som kan lave det dato-mæssige om til en ren sql-løsning, så hører jeg gerne fra jer ;)
Avatar billede ldanielsen Nybegynder
19. september 2005 - 11:07 #2
Skal det ikke bare være "dags dato"? Så hvorfor ikke bare:

strSQL = "INSERT INTO " & strMemberTablePrefix & "IPLIST (IPLIST_MEMBERID, IPLIST_STARTIP, IPLIST_STARTDATE, IPLIST_ENDDATE, IPLIST_STATUS) VALUES ('" & RS("M_NAME") & "', '" & RS("M_LAST_IP") & "', GETDATE(), DATEADD(y, 1, GETDATE()), 0)"

Du gør en del ud af at klokkeslættet skal være midnat. Det kan også laves i SQL, men jeg har meget svære ved at se hvorfor??
Avatar billede ldanielsen Nybegynder
19. september 2005 - 11:12 #3
Anyway, erstat GETDATE() med dette:

CONVERT(smalldatetime, CONVERT(CHAR(8), GETDATE(), 112), 112)

Så er klokkeslættet 00:00:00
Avatar billede axkris Nybegynder
19. september 2005 - 11:41 #4
Midnat er lige meget, det var blot fordi jeg ikke også gad at rode med tiden :-)

Jeg prøver lige dit eksempel og vender tilbage.
Avatar billede axkris Nybegynder
19. september 2005 - 20:50 #5
Har testet det nu, men jeg skal altså :-) bruge datoen formateret på følgende måde:  20050917

Så jeg kan ikke bruge getDate(), desværre.
Avatar billede ldanielsen Nybegynder
19. september 2005 - 22:54 #6
Øh, er det ikke datofelter (datetimer eller smalldatetime)?

Så gør sådan:

strSQL = "INSERT INTO " & strMemberTablePrefix & "IPLIST (IPLIST_MEMBERID, IPLIST_STARTIP, IPLIST_STARTDATE, IPLIST_ENDDATE, IPLIST_STATUS) VALUES ('" & RS("M_NAME") & "', '" & RS("M_LAST_IP") & "', CONVERT(CHAR(8), GETDATE(), 112), CONVERT(CHAR(8), DATEADD(y, 1, GETDATE()), 112), 0)"

Det konverterer til chr, men hvis datoen er int vil det virke alligevel.

Og så må jeg da råde dig til at bruge datetime, der er mange fordele ved det.
Avatar billede axkris Nybegynder
19. september 2005 - 22:55 #7
Fletet er ikke et datofelt, men et varchar-felt (det er ikke mig som har lavet systemet ;))
Avatar billede axkris Nybegynder
01. oktober 2005 - 19:55 #8
Nå, lukker og slukker.

Jeg løste det ved brug af vb-kode i stedet for indbyggede sql-funktioner.
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