Strings manipuleren (MySQL): verschil tussen versies

Uit De Vliegende Brigade
Naar navigatie springen Naar zoeken springen
 
(2 tussenliggende versies door dezelfde gebruiker niet weergegeven)
Regel 122: Regel 122:
  
 
== Testen voor aanwezigheid van een bepaald teken ==
 
== Testen voor aanwezigheid van een bepaald teken ==
 +
 +
In een ''where-clause'' kun je op allerlei manieren testen op de aanwezigheid van een string. Simpel voorbeeld:
  
 
<pre>
 
<pre>
select * from import where sku like "%/%" // Selecteer alle records met een / in veld 'sku'
+
# Selecteer alle records met een / in veld 'sku'
 +
################################################
 +
#
 +
select
 +
  *  
 +
from  
 +
  import  
 +
where  
 +
  sku like "%/%"
 +
</pre>
 +
 
 +
Het wordt interessanter als onderdeel van flow control. Voorbeeld dat werkt in sql-scripts (dus buiten sprocs):
 +
 
 +
<pre>
 +
select
 +
  if
 +
  (
 +
      instr("blub", "l")>0,
 +
      "Ja",
 +
      "Nee"
 +
  ) as resultaat;
 
</pre>
 
</pre>
  

Huidige versie van 16 jul 2021 om 16:42

char_length()

char_length() retourneert het aantal karakters, terwijl length het aantal bytes retourneert:

select char_length("Kohlebürsten") # 12
select length("Kohlebürsten")      # 13

Voor details, zie Strings, bytes & characters (MySQL).

Converteren naar onderkast

update tbl_tools

set tbl_tools.kind_de_lowercase =lower(tbl_tools.kind_de_lowercase)

Eerste letter van elk woord converteren naar kapitaal

Standaard kan dat niet in MySQL, maar dit helpt al flink:

update tbl_merk
set name = concat(
    upper(substr(name,1,1)),
    lower(substr(name,2))
);

Kolommen vervangen

Algemeen:

UPDATE table_name SET doelveld = nieuwewaarde

Voorbeeld:

UPDATE 

    tbl_root

SET 

    MateriaalDE ='Graphit'

WHERE 

    KindOfProduct='Koolborstels voor handgereedschap'

Left

select left("hoipipeloi",3);
hoi

length()

Zie char_lenght() hierboven!

Replace

Zie Replace() (MySQL)

Right()

Bv.:

select right("foo-bar",3)
bar

Substring & Position

Substring

Gebruik substring en position om substring te extraheren.

Voorbeeld: Dubbele primaire sleutels met schuine streep

select substr("0100/1100",1,4);                               # From position 1, select 4 characters → 0100
select substr("0100/1100",5);                                 # From position 5, select all characters → /1100
select substr("0100/1100",5,1);                               # From position 5, select 1 character → /
select substr("0100/1100",5,2);                               # From position 5, select 2 characters → /1
select position("/" in "0100/1100");                          # Output: 5
select substr("0100/1100",1,position("/" in "0100/1100")-1);  # Output: 0100
select substr("0100/1100",position("/" in "0100/1100")+1)     # Output: 1100

P.s.:

  • Er mag geen spatie zitten in position(
  • Om een valuta-teken weg te toveren, zou ik substring_index gebruiken

Toegepast op een tabel als geheel

select substr(apparaat_type,1,3) from tbl_tmp1

Met underscores gescheiden samengestelde sleutels

Ik heb regelmatig data met viervoudige samengestelde sleutels, gescheiden door underscores:

0101_Bosch_P 80 / P 80 K_0 603 232 001
0101_Bosch_P 80 / P 80 K_0 603 232 003
0101_Bosch_P 80 / P 80 K_0 603 232 032

En zo peuter je dit uit elkaar:

select

	sku,
	substring_index(sku,"_",1) as sub_1,
	substring_index(substring_index(sku,"_",2),"_",-1) as sub_2,
	substring_index(substring_index(sku,"_",3),"_",-1) as sub_3,
	substring_index(substring_index(sku,"_",4),"_",-1) as sub_4

from rootb1;

Testen voor aanwezigheid van een bepaald teken

In een where-clause kun je op allerlei manieren testen op de aanwezigheid van een string. Simpel voorbeeld:

# Selecteer alle records met een / in veld 'sku'
################################################
#
select
   * 
from 
   import 
where 
   sku like "%/%"

Het wordt interessanter als onderdeel van flow control. Voorbeeld dat werkt in sql-scripts (dus buiten sprocs):

select
   if
   (
      instr("blub", "l")>0,
      "Ja",
      "Nee"
   ) as resultaat;

Zie ook

Bronnen