Avatar billede cr Nybegynder
30. maj 2006 - 09:54 Der er 13 kommentarer og
1 løsning

Dato filter på char felt?

Hej
Jeg har en opgave hvor jeg skal arbejde på en database som lavet således at alle felter der definerede som char felter.

Nogle af felterne er dato felter og jeg har brug for at lave en where bestilling på dem hvor de bliver behandlet som dato og ikke som char.

Eksempel:

SELECT *
FROM Temp
WHERE Start_Date > 01042006

Nogen ideer til hvordan jeg gør dette? Kan man typecaste? Bliver man nød til at flytte data over i virtual table med dato felter?
Avatar billede pgroen Nybegynder
30. maj 2006 - 10:11 #1
Prøv med
SELECT *
FROM Temp
WHERE to_date(Start_Date,'DDMMYYYY') > to_date('01042006','DDMMYYYY');
Avatar billede cr Nybegynder
30. maj 2006 - 10:19 #2
Ser ikke ud til at virke. Det retunere et tomt record set og jeg ved at der er felter med dato > end 01042006
Avatar billede pgroen Nybegynder
30. maj 2006 - 10:24 #3
hmm. Prøv lige at skrive:

select min(to_date(start_date,'DDMMYYYY')),
      max(to_date(start_date,'DDMMYYYY'))
from temp;
Avatar billede cr Nybegynder
30. maj 2006 - 10:27 #4
Der er nogle af dato felterne som er blanke så den virker ikke medmindre man sætter et <> '' filter ind.

Hvad skulle din forespørgsel retunrere? største og mindste dato?
Avatar billede cr Nybegynder
30. maj 2006 - 10:31 #5
Har lige lavet et par checks.

Alle felter er fyldt, men der er åbentbart en eller flere som er ulovligt fyldt med ikke numerisk værdi. Skal se om jeg kan digte noget der sortere disse fra, er lidt svært at finde dem manuelt fordi der er 190.000 records.
Avatar billede pgroen Nybegynder
30. maj 2006 - 10:32 #6
Nemlig, det var såmænd bare for at vi kunne sikre os, at dit datoformat er som vi antager...

Prøv så med:

select min(to_date(start_date,'DDMMYYYY')),
      max(to_date(start_date,'DDMMYYYY'))
from temp
where start_date is not null;
Avatar billede pgroen Nybegynder
30. maj 2006 - 10:40 #7
et primitivt check kunne være:

select start_date
  from temp
where translate (start_date,'0123456789','9999999999') <> '9999999999';
Avatar billede cr Nybegynder
30. maj 2006 - 10:49 #8
Prøver jeg lige, so fare tak for de gode og hurtige input! Du har ihvertfald sikret dig points ;)
Avatar billede cr Nybegynder
30. maj 2006 - 10:53 #9
datoerne i text feltet står som :

01.04.2006

kan det være . som forstyrre to_date funktionen?
Avatar billede pgroen Nybegynder
30. maj 2006 - 10:56 #10
Ja, mon ikke ! :-)

Så hedder det:

SELECT *
FROM Temp
WHERE to_date(Start_Date,'DD.MM.YYYY') > to_date('01042006','DDMMYYYY');
Avatar billede cr Nybegynder
30. maj 2006 - 11:11 #11
Det virker! Du er min bedste ven lige nu ;)

Skriv lige et svar så jeg kan give dig points!
Avatar billede cr Nybegynder
30. maj 2006 - 11:14 #12
hehe du havde lavet svar :) så her fik du points! Endnu engang mange tak for hjælpen.
Avatar billede pgroen Nybegynder
30. maj 2006 - 11:15 #13
Nu kan man jo ikke købe sine venner ....:-)
Avatar billede cr Nybegynder
30. maj 2006 - 11:17 #14
Hehe rigtigt. Så må du nøjes med at være Kongen.
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