Avatar billede anders_larsen Nybegynder
16. oktober 2002 - 17:38 Der er 13 kommentarer og
1 løsning

Wildcard i date felt

Hej,

Hjælp til at finde fødselsdage uanset årstal.

Jeg har en tabel datotest

id datochar              dato

  1 17-10-1998            19981017
  2 18-10-1998            19981018
  3 19-10-1998            19981019
  4 17-10-1999            19991017
  5 18-10-1999            19991018
  6 19-10-1999            19991019
  7 17-10-2000            20001017
  8 18-10-2000            20001018
  9 19-10-2000            20001019
id = integer
datochar = char(20)
dato = date

Følgende virker:
select id, dato from datotest
WHERE
datochar MATCHES "18-10-*"

Retunerer 3 rækker. (id: 2,5 og 8)

Hvordan får jeg følgende til at virke:

select id, datochar from datotest
WHERE
dato MATCHES "????1018"

Virker ikke, man kan ikke bruge MATCHES samme med wildcard, godt så.

Hvordan kan jeg komme uden om året i min datosøgning?
(Jeg kan ikke lave DB design om eller søge i char feltet)

Mvh,
Anders Larsen
Avatar billede lasse_buck Nybegynder
16. oktober 2002 - 18:27 #1
Du skriver ikke hvilken database det er. Mon ikke det er MS SQL

... WHERE datepart(day, dato) = 18 AND datepart(month, dato) = 10;
eller forkortet
... WHERE datepart(dd, dato) = 18 AND datepart(mm, dato) = 10;
Avatar billede anders_larsen Nybegynder
16. oktober 2002 - 18:34 #2
Hep, Lassse.
Lige nu sidder jeg på en Informix 7.x og tester, mens min Live vist er noget paradox... datepart virker ikke på Informix.
Det er et færdigt program og jeg har en ukendt rapport generator til at trække fødselsdagene

/Anders.
Avatar billede lasse_buck Nybegynder
16. oktober 2002 - 18:35 #3
Sorry, det var vist til SyBase SQL Server. Prøver lige at finde løsningen for MS SQL.
Avatar billede lasse_buck Nybegynder
16. oktober 2002 - 18:37 #4
Informix - hehe, så må jeg lede videre.
Men det er nok samme type løsning, hvor vi skal trække de aktuelle komponenter ud af dato.
Avatar billede lasse_buck Nybegynder
16. oktober 2002 - 18:50 #5
Anders >> Du skriver, at du ikke kan søge i char feltet.
Skal jeg forstå det sådan, at du ikke har mulighed for at aggregere på feltet dato men er bundet til at anvende "WHERE dato MATCHES minstreng" ?
Avatar billede anders_larsen Nybegynder
16. oktober 2002 - 18:53 #6
Jo, hvis dato er indtastet i et charfelt kan jeg søge, på eksakt dato og med wildccard (*?) med MATCHES / LIKE.
Men når datoen er i et felt med "rigtig" date definition (som type), kan jeg kun søge på eksakt dato.
Avatar billede lasse_buck Nybegynder
16. oktober 2002 - 19:22 #7
Det lykkedes mig ikke at finde det, som jeg ledte efter. Prøv dog lige, om dette virker:
WHERE month(dato) = 18 AND day(dato) = 10;
Avatar billede lasse_buck Nybegynder
16. oktober 2002 - 19:23 #8
Hvis du kan finde en funktion, som konverterer DATE til en streng, så kan du sammenligne med den streng i stedet.
Avatar billede anders_larsen Nybegynder
16. oktober 2002 - 19:33 #9
Hey - way to go!
Virker i Informix, så er det lige Paradoxen...... stay tuned
Avatar billede anders_larsen Nybegynder
16. oktober 2002 - 19:45 #10
Nu mistede jeg fjernforbindelsen til Live maskinen, der går lige en time eller 2.....
Avatar billede anders_larsen Nybegynder
16. oktober 2002 - 20:53 #11
Lasse: Trist, det virker ikke i min paradox/rapportgenerator... jeg er kommet væsentligt længere og må en tur rundt om forhandleren. Har du nogle godt tips / sider på nettet hvor du evt. og bl.a. fandt ovenstående der jo virker i Informix, så er pointene dine. Og jeg må kæmpe videre....
Avatar billede anders_larsen Nybegynder
16. oktober 2002 - 23:28 #12
Lige en ting til: Fejlen jeg nu får er: "capability not supported"
Bl.a. med følgende SQL
SELECT Konto, Dato
FROM ExtInfo
WHERE LinNr=1
AND mm(Dato) = 10 AND dd(Dato) = 18
ORDER BY Konto;

Har forsøgt flere varianter, dem der ikke giver syntaks fejl giver "capability not supported".
Avatar billede lasse_buck Nybegynder
17. oktober 2002 - 00:42 #13
Jeg er måske på sporet af noget. Funktionaliteten i Paradox SQL er vist ret begrænset, men jeg tror vi skal anvende funktionen CAST.

http://mudzilla.com/help/sql/cast.htm
Hvis datofeltet konverteres til en CHAR, så kan man sammenligne vha. MATCHES.
Alternativt kan du bruge SUBSTRING sammen med CAST til at ekstrahere dag- og måned-delen.
http://mudzilla.com/help/sql/substring.htm

Ved brug af CAST er der muligvis et issue, som man skal være opmærksom på:
CAST(FLDdate  AS char(10))  returns a two-digit
year for 19XX and four-digit year for year > 2000
http://info.borland.com/devsupport/bde/issues/50/local_drivers_(paradox_&_dbase).html
Avatar billede anders_larsen Nybegynder
17. oktober 2002 - 14:01 #14
Så er den der!
Jeg kunne ikke få CAST til at virke. Men EXTRACT derimod.

Nedenstående virker!

SELECT Konto, Dato
FROM ExtInfo
WHERE LinNr=1
AND EXTRACT(DAY FROM ExtInfo.Dato) = "29"
AND EXTRACT(MONTH FROM ExtInfo.Dato) = "10"
ORDER BY Konto;

Tak til Jesper for Paradox SQL manualen og Lasse for at komme så tæt på, Lasse du har fortjent dine point!

Mvh,
Anders.
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