Avatar billede nielsen2002 Nybegynder
09. oktober 2006 - 15:28 Der er 12 kommentarer og
1 løsning

Sammenlign 2 kolonner med fn now()

Hej Experten

Jeg har et mindre problem.

Jeg har Dato og Tid i hver sin tabel, og jeg skal hente rækkerne ud hvis Dato + Tid > Nu. Kan det lade sig gøre?

Altså noget i stil med

"SELECT * FROM mintabel WHERE Dato&Tid > {fn Now()}"
Avatar billede lorentsnv Nybegynder
09. oktober 2006 - 15:55 #1
Du kan eventuelt prøve at konvertere din tekststreng til datoformat således:

Cast(Dato + Tid datetime) > Now()
Avatar billede lorentsnv Nybegynder
09. oktober 2006 - 15:57 #2
Et eksempel på konvertere tekststrenge til datoformat:

declare @Dato as varchar(20)
declare @Tid as varchar(20)

set @Dato = '2006-01-01'
set @Tid = '10:12:23'

select cast(@Dato + ' ' + @Tid as datetime)
Avatar billede nielsen2002 Nybegynder
09. oktober 2006 - 16:08 #3
Hej Lorent.

Hvordan vil men egentlige SQL streng så komme til at se ud?

Det ska helst laves uden Paremetre, altså ren SQL
Avatar billede pierrehusted Nybegynder
09. oktober 2006 - 16:15 #4
Måske sådan her...

SELECT *
FROM mintabel
WHERE cast(datofelt & ' ' & tidfelt as datetime) > CURRENT_TIMESTAMP

Bruger selv normalt CURRENT_TIMESTAMP, men vil tro du også kan sætte NOW ind samme sted.
Måske er det nødvendigt at lave dato- og tid-felterne om til tekst først:

SELECT *
FROM mintabel
WHERE cast(cast(datofelt as varchar) & ' ' & cast(tidfelt as varchar) as datetime) > CURRENT_TIMESTAMP
Avatar billede pierrehusted Nybegynder
09. oktober 2006 - 16:16 #5
Hmm... måske skal &tegnene være +tegn i stedet for.
Avatar billede lorentsnv Nybegynder
09. oktober 2006 - 16:19 #6
SELECT * FROM mintabel WHERE cast(@Dato + ' ' + @Tid as datetime) > now()

Nu kender jeg ikke dit format på dato og tid. Passer det med det format jeg har vist?
Avatar billede lorentsnv Nybegynder
09. oktober 2006 - 16:22 #7
Unskyld:
SELECT * FROM mintabel WHERE cast(@Dato + ' ' + @Tid as datetime) > getdate()
Avatar billede nielsen2002 Nybegynder
09. oktober 2006 - 16:24 #8
Jeg får fejlen:

Microsoft OLE DB Provider for ODBC Drivers error '80040e14'

[Microsoft][ODBC SQL Server Driver][SQL Server]Invalid operator for data type. Operator equals boolean AND, type equals nvarchar.

Når jeg bruger    cast(dato + ' ' + tid as datetime) > CURRENT_TIMESTAMP

De to kolonner er begge nvarchar()
Avatar billede nielsen2002 Nybegynder
09. oktober 2006 - 16:31 #9
Hej Pierre. Det ser ud til at virke. jeg brugte

SELECT *
FROM mintabel
WHERE cast(cast(datofelt as varchar) + ' ' + cast(tidfelt as varchar) as datetime) > CURRENT_TIMESTAMP

Men det kræver at jeg bruger Amerikans dato.. kan jeg ændre det? da dataen bliver sat ind i DD/MM/YYYY format og ikke YYYY/MM/YY
Avatar billede nielsen2002 Nybegynder
09. oktober 2006 - 16:32 #10
Du får self point :)  men hvis du kan hjælpe mig med det sidste spørgsmål så bliver jeg glad :)
Avatar billede lorentsnv Nybegynder
09. oktober 2006 - 16:33 #11
Jeg får den samme fejlmedelelse, hvis jeg bruger & i stedet for +

Er du sikker på at du ikke har brugt cast(dato & ' ' & tid as datetime) > CURRENT_TIMESTAMP?
Avatar billede nielsen2002 Nybegynder
09. oktober 2006 - 16:38 #12
Ja. jeg bruger:

cast(cast(dato as varchar) + ' ' + cast(tid as varchar) as datetime) < CURRENT_TIMESTAMP;"

Og det virker fint. dato og tid er nvarchar, og datofeltet har format YYYY-MM-DD
Avatar billede pierrehusted Nybegynder
11. oktober 2006 - 08:56 #13
Mener du kan sætte et parameter på CAST, så den afleverer i et andet format.

Prøv at læse i BOOKS ONLINE (jeg har dem ikke lige her hvor jeg sidder nu, så jeg kan desværre ikke hjælpe grundigere).
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