Avatar billede baitianlong Nybegynder
04. maj 2007 - 12:28 Der er 13 kommentarer og
1 løsning

like - ignore case

Hvordan skriver man ignore case i sin SQL saetning i.f.m LIKE '%noget%' ?
Avatar billede erikjacobsen Ekspert
04. maj 2007 - 12:47 #1
Er du sikker på du ikke allerede har "ignore case" på feltet. Oprettes feltet med ordet "BINARY" er den case-sensitiv på  felt='værdi' ellers er den ikke.  Og så har jeg ikke lige prøvet, men det ku' da være det samme for LIKE.
Avatar billede baitianlong Nybegynder
04. maj 2007 - 13:17 #2
nej, LIKE 'Ku%' giver resultater (Kuala Lumpur f.eks) men LIKE 'ku%' giver ingen resultater..
Avatar billede erikjacobsen Ekspert
04. maj 2007 - 13:39 #3
Men hvad er felttypen da?  En "almindelig" VARCHAR skulle gerne opføre sig som jeg har beskrevet.
Avatar billede michael_stim Ekspert
04. maj 2007 - 13:44 #4
LIKE burde väre case insensitive.
Ellers er der vel LOWER(felt) LIKE '%LOWER(variabel)%'
Avatar billede baitianlong Nybegynder
04. maj 2007 - 15:35 #5
Det er en varchar (og ikke binary). Jeg lyver nu ikke, naar jeg siger at 'Ku%' giver resultater, men ikke 'ku%' :)

Det duer ikke med LOWER, det skulle naermere vaere capitalize.. Men jeg er ude efter Ignore Case. Jeg kunne selvfoelgelig bygge det ind i javakoden med substring og toUpperCase, toLowerCase og soege paa begge i sql saetningen, men det er ikke saa "elegant"
Avatar billede baitianlong Nybegynder
04. maj 2007 - 16:08 #6
naa, nu har jeg bygget min ignore-case ind i java koden saaledes:

if(searchstring != null && !searchstring.equals("")) {
            String searchstring1 = searchstring.substring(0,1).toUpperCase() + searchstring.substring(1,searchstring.length());
            String searchstring2 = searchstring.toUpperCase();
            String searchstring3 = searchstring.toLowerCase();
            try{
                Statement stmt = con.createStatement();
                ResultSet rs = stmt.executeQuery("SELECT DISTINCT origin_code, origin " +
                        "FROM route WHERE carrier='Malaysia Airlines' " +
                        "AND origin LIKE '%" + searchstring1 + "%' " +
                        "OR origin LIKE '%" + searchstring2 + "%' " +
                        "OR origin LIKE '%" + searchstring3 + "%' " +
                        "ORDER BY origin");

                while(rs.next()) {
                    Airport a = new Airport();
                    a.setAirportcode(rs.getString("origin_code"));
                    a.setAirportname(rs.getString("origin"));
                    results.add(a);
                }
            } catch (SQLException e) {
                e.printStackTrace();
            }
        } else {
            try{
                Statement stmt = con.createStatement();
                ResultSet rs = stmt.executeQuery("SELECT DISTINCT origin_code, origin " +
                        "FROM route WHERE carrier='Malaysia Airlines' " +
                        "ORDER BY origin");
                while(rs.next()) {
                    Airport a = new Airport();
                    a.setAirportcode(rs.getString("origin_code"));
                    a.setAirportname(rs.getString("origin"));
                    results.add(a);
                }
            } catch (SQLException e) {
                e.printStackTrace();
            } 
        }

Det virker fint...

Jeg vil dog naturligvis gerne give lidt for interessen, som saedvanligt... hvilket jeg mener er gode manerer :) Derfor kan i smide et svar, hvis det er...
Avatar billede michael_stim Ekspert
04. maj 2007 - 16:12 #7
Og opdagede senere at LIKE er casesensitive (på oracle i hvert fald).
Samler ikke på point, ellers tak og god weekend.
Avatar billede erikjacobsen Ekspert
04. maj 2007 - 16:37 #8
Jeg samler heller ikke på point, tak. Men jeg vil nu stadig påstå at LIKE på VARCHAR ikke er case-sensitive i MySql (InnoDB, 5.0.27-community-nt, Vista - men det sku' da helst ikke betyde noget).  Skal vi kigge mere på det, så kan vi da godt - ellers glemmer vi det bare igen ;)
Avatar billede cwboy Nybegynder
04. maj 2007 - 16:48 #9
På MS SQL afhænger det af, hvilken collation der bliver brugt på feltet. Man kan fx. lave en "WHERE Destination LIKE 'ku%' COLLATE Danish_Norwegian_CI_AS", hvor CI så er Case Insensitive.

Mit gæt er, at din tabel er oprettet med en case sensitiv collation. Hvordan man checker og ændrer det i MySQL kan jeg dog desværre ikke hjælpe med.
Avatar billede baitianlong Nybegynder
04. maj 2007 - 17:32 #10
Vi lader det ligge, Erik :) Den programmatiske vej virker glimrende...

Tak til alle -igen...
Avatar billede baitianlong Nybegynder
04. maj 2007 - 17:37 #11
printStackTrace()
Avatar billede erikjacobsen Ekspert
04. maj 2007 - 18:10 #12
Ja, jeg fik oprettet min lille testtabel med latin1_swedish_ci, case insensitive, i det ene felt, men latin1_bin i det andet felt der havde BINARY med. Måske jeg tager fejl, men man skal da være omhyggelig, for at få felter oprettet som er case sensitive ... ?  Men, never mind, vi glemmer alt om det!
Avatar billede baitianlong Nybegynder
04. maj 2007 - 18:31 #13
Jeg bruger noget, som hedder Navicat, til at lave mysql "action". Maaske laver den for omhyggelige/uhyggelige ting og sager. Ved det ikke...
Avatar billede arne_v Ekspert
27. maj 2007 - 04:41 #14
mysql> select 'A' LIKE 'a';
+--------------+
| 'A' LIKE 'a' |
+--------------+
|            1 |
+--------------+
1 row in set (0.00 sec)

mysql> select 'A' LIKE 'a' COLLATE latin1_bin;
+---------------------------------+
| 'A' LIKE 'a' COLLATE latin1_bin |
+---------------------------------+
|                              0 |
+---------------------------------+
1 row in set (0.00 sec)
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