Avatar billede laurents Nybegynder
19. juni 2003 - 13:43 Der er 21 kommentarer og
1 løsning

kovertering af datoforat i SQL udtræk

Go'da,

Jeg har etfelt i min MS SQL som har type datetime og indeholder data i dette format 19-06-2003 16:27 (datoTid).

Disse data vil jeg gerne hive ud af min SQL i en gigant join således at jeg i min WHERE kan bruge datodelen af værdien i de enkelte felter - altså:

.... Where DatoTid = 19-06-2003 ORDER BY ........

men jeg kan ikke finde ud af, at konvertere den datotids værdi til en datoværdi som jeg kan bruge - HJÆÆÆÆLLP!!!
Avatar billede laurents Nybegynder
19. juni 2003 - 13:47 #1
stave kan jeg heller ikke i dag - jeg beklager - overskriften skulle være konvertering af datoformat i SQL udtræk......
Avatar billede bennytordrup Nybegynder
19. juni 2003 - 13:50 #2
Hvis du skal sammenligne et datofelt med et andet datofelt, sammenligher du direkte (where EtDatoFelt=EtAndetDatoFelt)

Hvis du skal sammenligne med en datokonstant, skal du bruge ISO-formatet (where EtDatoFelt='ÅÅÅÅMMDD HH:MM:SS:SSS' - eks: EtDatoFelt='20031224 18:00:00:000')

Samme regel gælder ved tildeling af konstanter til datovariable.
Avatar billede bennytordrup Nybegynder
19. juni 2003 - 13:50 #3
Fidusen er, at du så ikke er afhængig af regionale indstillinger i forhold til SQL Serveren. ISO-formatet genkendes altid af SQLServeren uanset regionale indstillinger.
Avatar billede laurents Nybegynder
19. juni 2003 - 13:59 #4
hmmm - jeg har nok ikke fået forklaret mig godt nok.

Sammenligningen er mellem et sql felt "DatoTid" (DD-MM-YYYY HH:MM:SS) og en variabel som kommer fra en form "RepReqDate" i formatet DD-MM-YYYY

allá: SELECT * FROM en_tabel WHERE DatoTid = request("RepReqDate")

dette giver følgende SQL streng:

SELECT * FROM en_tabel WHERE Tbl_Data.DatoTid = 18-06-2003
... og en EOF på datasettet......
Avatar billede bennytordrup Nybegynder
19. juni 2003 - 14:02 #5
Det er stadig et spørgsmål om sammenligning med en konstant. Du bygger SQL-sætningen op inden, du fyrer den af til databasen. Derfor skal du formattere indholdet af request("RepReqDate") til ISO-formatet:

dim sSQL as string
sSQL = "select * from en_tabel where DatoTid = '" & Format$(request("RepReqDate"), "yyyymmdd hh:nn:ss:000") & "'"

Dette er med VB syntax.
Avatar billede kustoden Nybegynder
19. juni 2003 - 14:14 #6
Hej

Prøv med WHERE CONVERT(CHAR(8), en_tabel.DatoTid, 105) = '18-06-2003'


105 konverterer til dd-mm-yyyy (5 konverterer til dd-mm-yy)
106  -"-            dd mm yyyy (6 -"-            dd mm yy) osv
Avatar billede bennytordrup Nybegynder
19. juni 2003 - 14:17 #7
dim sSQL as string
sSQL = "select * from en_tabel where DatoTid = '" & Format$(request("RepReqDate"), "yyyymmdd") & "'"
Avatar billede laurents Nybegynder
19. juni 2003 - 14:20 #8
ok - så lærte jeg noget nyt - fedt!
Har dog et lille problem - den fejler.....

Microsoft VBScript compilation error '800a0408'
Invalid character
/_files/reports/databystand.asp, line 109
strSQL = strSQL & "WHERE Tbl_Data.DatoTid = '" & Format$(request("RepReqDate"), "yyyymmdd hh:nn:ss:000") & "'"
-------------------------------------------------------^
(den øffer over $) - kan du lure hvorfor?
Avatar billede bennytordrup Nybegynder
19. juni 2003 - 14:23 #9
Ja, der er forskel på VB og VBScript. Drop $
Avatar billede bennytordrup Nybegynder
19. juni 2003 - 14:23 #10
Format$ returnerer en string i VB. Format returnerer en variant. VBScript understøtter kun variant, derfor dur format$ ikke.
Avatar billede laurents Nybegynder
19. juni 2003 - 14:26 #11
-> Kustoden

strSQL = strSQL & "WHERE CONVERT(CHAR(8),Tbl_Data.DatoTid,105) = " & request("repdate") & " " - desværre - den kan SQL'en ikke lide:

Microsoft OLE DB Provider for ODBC Drivers error '80040e21'
ODBC driver does not support the requested properties.
Avatar billede laurents Nybegynder
19. juni 2003 - 14:32 #12
->benny.tordrup
hmmm - desværre - hvis jeg dropper $ siger den (men jeg har nu defineret at det er VBScript):

Microsoft VBScript runtime error '800a000d'
Type mismatch: 'Format'
/_files/reports/databystand.asp, line 115

og linie 115:
sSQL "WHERE Tbl_Data.DatoTid = '" & Format(request("RepReqDate"), "yyyymmdd hh:nn:ss:000") & "'"

Jeg har kommenteret dim sSQL as string ud da den ellers brokker sig over dette:

Microsoft VBScript compilation error '800a0401'
Expected end of statement
/_files/reports/databystand.asp, line 8
dim sSQL as string
---------^

Har det noget at sige?
Avatar billede laurents Nybegynder
19. juni 2003 - 14:34 #13
->benny.tordrup
ups - min mus ramte en forkert knap - håber, at du vil give en hånd med alligevel..... :-)
Avatar billede bennytordrup Nybegynder
19. juni 2003 - 14:35 #14
dim strSQL

sSQL "WHERE Tbl_Data.DatoTid = '" & Format(request("RepReqDate"), "yyyymmdd") & "'"
Avatar billede bennytordrup Nybegynder
19. juni 2003 - 14:36 #15
sSQL "WHERE Tbl_Data.DatoTid = '" & Format(cdate(request("RepReqDate")), "yyyymmdd") & "'"
Avatar billede laurents Nybegynder
19. juni 2003 - 14:48 #16
Microsoft VBScript runtime error '800a000d'
Type mismatch: 'Format'
/_files/reports/databystand.asp, line 116

...... og kolonnen er defineret som datetime i MS SQL'en ??????
Avatar billede kustoden Nybegynder
19. juni 2003 - 14:50 #17
Du skal bare putte ' ' rundt om strengen...
Avatar billede laurents Nybegynder
19. juni 2003 - 14:54 #18
-> Kustoden

strSQL = strSQL & "WHERE CONVERT(CHAR(8),Tbl_Data.DatoTid,105) = '" & request("repdate") & "' "

leverer et tomt dataset selvom der er data i basen.....
Avatar billede kustoden Nybegynder
19. juni 2003 - 15:16 #19
Sorry... Du har jo netop 4 cifre i årstal

WHERE CONVERT(Char(10), Tbl_Data.DatoTid, 105) = '28-05-2003'
Avatar billede laurents Nybegynder
19. juni 2003 - 15:24 #20
-> Kustoden

Du er sq min ven! det virker og jeg er glad igen!
Jeg fik trykket på en forkert knap og derved tildelt pointene til kustoden, men derfor skal du - min redningsmand - sq ikke snydes - hvad er det nemmeste - er det at oprette et nyt spørgsmål, som du så kan svare på eller ...... ?? jeg har ikke rigtigt brugt dette før!
Avatar billede kustoden Nybegynder
19. juni 2003 - 15:34 #21
Det kunne være en løsning....

Jeg er også først kommet på i dag. Fandt siden ved et tilfælde.
Avatar billede laurents Nybegynder
19. juni 2003 - 15:39 #22
-> Kustoden

ok - gider du ikke at svare på http://www.eksperten.dk/spm/366813?

STORT hils og tusinde tak for hjælpen
/H
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