Strings manipuleren (MySQL)

Uit De Vliegende Brigade
Naar navigatie springen Naar zoeken springen
The printable version is no longer supported and may have rendering errors. Please update your browser bookmarks and please use the default browser print function instead.

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