23. januar 2003 - 08:39Der er
34 kommentarer og 1 løsning
LIKE, men kun på en del af tekststrengen
Hejsa! Jeg har lavet en asp-side, hvor man har forskellige selections. Men nu løber jeg ind i et problem m.h.t. søgestrengen. Er der ikke noget med at man kan lave denne sætning:
strSQL = "Select * FROM SIDETID WHERE (TEXT LIKE '%" & request("avis") strSQL = strSQL & "%' OR upper(TEXT) LIKE '%" & Request("avis") strSQL = strSQL & "%') and to_char(timestamp,'DD-MM-YYYY') BETWEEN '" strSQL = strSQL & CStr(MinD) & "' and '" & CStr(MaxD) & "' order by TEXT, Timestamp"
om, så man kun laver en select på de 3 sidste karakterer ?
Kan du ikke forklare lidt nærmere hvad du vil ?? Vil du have vist de sidste 3 chars eller kun have vist poster hvor de sidste 3 chars opfylder søgekriteriet ??
det er en oracle database. nedenfor er et par eksempler på hvad der kan stå i feltet:
001_s1O <- bemærk at dette er stort "O" 012_s10 <- bemærk dette er et nul-tal 001_14V 014_s5O
Hvis man ser på de sidste to eksempler kan jeg ikke nøjes med at selecte LIKE på hele strengen, hvis jeg eksempelvis søger på 14. Jeg vil kun hav dem, der opfylder kravet på de sidste 3 karakterer (altså hvor der er '14' efter underscoren)
Denne sql giver dig text og en compute af text der giver dig de sidste 3 chars: SELECT "TEXT" , substr("TEXT", length( "TEXT" ) - 2 ,length( "TEXT" )) FROM "SIDETID" ;
Denne sql skulle så kun vise de ønskede poster: strSQL = "Select * FROM SIDETID WHERE (substr("TEXT", length( "TEXT" ) - 2 ,length( "TEXT" )) LIKE '%" & request("avis") strSQL = strSQL & "%' OR upper(TEXT) LIKE '%" & Request("avis") strSQL = strSQL & "%') and to_char(timestamp,'DD-MM-YYYY') BETWEEN '" strSQL = strSQL & CStr(MinD) & "' and '" & CStr(MaxD) & "' order by TEXT, Timestamp"
dk_akj - den viser stadig for meget. Hvis jeg selecter med din sql og vil søge på alt der hedder xxx_014 (så bliver min select til ...Where TEXT like 14...) men jeg får stadig tekststrenge, der indeholder 014_xxx..
eagleeye: Jeg får invalid column name: strSQL = "Select * FROM SIDETID WHERE (right(TEXT,3) LIKE '%" & request("avis") strSQL = strSQL & "%' OR upper(TEXT) LIKE '%" & Request("avis") strSQL = strSQL & "%') and to_char(timestamp,'DD-MM-YYYY') BETWEEN '" strSQL = strSQL & CStr(MinD) & "' and '" & CStr(MaxD) & "' order by TEXT, Timestamp"
vrææææl.... :( nu har jeg erstattet * med de felter, jeg egentlig skal bruge.. men jeg får stadig Expected end of statement Poster lige min kode, som den ser ud nu: strSQL = "Select substr('TEXT', length( 'TEXT' ) - 2 ,length( 'TEXT' )), TIMESTAMP, EVENT, STATIONID, IDLETIME FROM SIDETID WHERE upper((substr('TEXT', length( 'TEXT' ) - 2 ,length( 'TEXT' ))) LIKE upper('%" & request("avis"))
jeg hæver lige point, for din hjælpsomhed (og min dumhed) men jeg kan ikke finde min nye fejl... [Oracle][ODBC][Ora]ORA-00907: missing right parenthesis
Select substr('TEXT', length( 'TEXT' ) - 2, length( 'TEXT' )), TIMESTAMP, EVENT, STATIONID, IDLETIME FROM SIDETID WHERE upper((substr('TEXT', length( 'TEXT' ) - 2 ,length( 'TEXT' ))) LIKE upper('%14)%') and to_char(timestamp,'DD-MM-YYYY') BETWEEN '15-01-2003' and '19-01-2003' order by TEXT, Timestamp
Skulle: LIKE upper('%" & request("avis") & ")" Ikke hedde: LIKE upper('%" & request("avis") & "')"
Men anyways... lige en side note. Lad nu være med at sætte request strengen direkte ind i din SQL. Her ville f.eks. http://minserver.dk/script.asp?avis='%20%SHUTDOWN(); ... nok kunne være en irriterende ting. (Eller noget i din stil).
yup - det rettede sig selv med den parantes, du fjernede. Den eksverer fint nu, men jeg får ingen resultat af søgning.. Hvis jeg bruger min gamle søgning får jeg 60+ poster
Select substr('TEXT', length( 'TEXT' ) - 2, length( 'TEXT' )), TIMESTAMP, EVENT, STATIONID, IDLETIME FROM SIDETID WHERE upper(substr('TEXT', length( 'TEXT' ) - 2 ,length( 'TEXT' ))) LIKE upper('%14%') and to_char(timestamp,'DD-MM-YYYY') BETWEEN '15-01-2003' and '19-01-2003' order by TEXT, Timestamp
ja, se så er det jeg løber ind i et andet problem. Det er nemlig således at man f.eks. skal kunne søge på enten 14V eller 14O eller begge (altså blot 14)
jeg kan se ideen, og synes det ser godt ud, men får det bare ikke til at virke... strSQL = "Select TEXT, TIMESTAMP, EVENT, STATIONID, IDLETIME, PRODTIME FROM SIDETID WHERE instr('TEXT', request('avis')) > 4" strSQL = strSQL & " and to_char(timestamp,'DD-MM-YYYY') BETWEEN '" strSQL = strSQL & CStr(MinD) & "' and '" & CStr(MaxD) & "' order by TEXT, Timestamp"
giver
Select TEXT, TIMESTAMP, EVENT, STATIONID, IDLETIME, PRODTIME FROM SIDETID WHERE instr('TEXT', request('avis')) > 4 and to_char(timestamp,'DD-MM-YYYY') BETWEEN '15-01-2003' and '19-01-2003' order by TEXT, Timestamp Microsoft OLE DB Provider for ODBC Drivers error '80040e14'
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.