MySQL Toolkit

7 mars 2019

J’ai finalement fait mon premier vrai commit sur GitHub, MySQL Toolkit.  Ce repository, avec un peu de temps, deviendra une collection de scripts, de fonctions, de procédures stockées et d’un tas d’autres choses utiles lorsque vous travaillez avec MySQL.  Pour l’instant toutefois, il n’y a que des fonctions.

Ce premier commit comprend:

collapse_blanks : Replaces multiple blanks with a single space.
collapse_spaces : Replaces multiple spaces with a single space.
initcap : Returns a character string with the first letter of each word converted to uppercase. This function EXACTLY mimics INITCAP of Oracle.
occurrences : Returns the number of occurrences of a search string inside a source string.
rot5 : Encodes/decodes a string with the ROT5 substitution cipher.
rot13 : Encodes/decodes a string with the ROT13 substitution cipher.
rot18 : Encodes/decodes a string with the ROT18 substitution cipher.
rot47 :Encodes/decodes a string with the ROT47 substitution cipher.
shuffle : Randomly shuffle the characters of a string using the Fisher-Yates (aka Knuth shuffle) algorithm.
to_roman : Converts an integer to its Roman numeral representation.

En attendant mon prochain commit, laissez-moi savoir en commentaire s’il y a des fonctions que vous trouveriez utiles dans MySQL!

 

 

 

Publicités

occurrencesOf

20 novembre 2018

Comment trouver le nombre d’occurrences d’une chaîne de caractères dans MySQL?  J’en avais déjà parlé ici en français et aussi en anglais.

Pour se faciliter la vie, rien de mieux qu’une fonction pour faire le travail!

 

SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='STRICT_TRANS_TABLES';

DROP FUNCTION IF EXISTS occurrencesOf;

DELIMITER //
CREATE FUNCTION occurrencesOf ( sourceString VARBINARY(255), searchString VARBINARY(255))
RETURNS MEDIUMINT UNSIGNED
DETERMINISTIC
LANGUAGE SQL
CONTAINS SQL
SQL SECURITY DEFINER
COMMENT 'Returns the number of occurrences of <searchString> inside <sourceString>'

BEGIN
DECLARE occ MEDIUMINT UNSIGNED;

SELECT FLOOR(( CHAR_LENGTH(sourceString) - CHAR_LENGTH(REPLACE(sourceString, searchString, '')) ) / (CHAR_LENGTH(searchString))) INTO occ;

RETURN occ;
END
//

DELIMITER ;
SET SQL_MODE=@OLD_SQL_MODE;

P.S.  J’ai l’intention de publier plusieurs fonctions utilitaires du genre.  D’ici à ce que je m’organise sur GitHub, je publierai le code de ces procédures et/ou fonctions ici en attendant!

Mise à jour (2019-03-07)



Count occurrences of a string using MySQL

20 juillet 2016

This was originally posted in French here.

There’s no string function in MySQL (and many other databases!) to help you find the number of occurrences of a string within another string.  For example, how many times does « abc »  appear in « abcbcbabcbacbcabcababcabacb » ?

I was asked this question on IRC a long time ago. Some poor soul was trying to find a particular subsequence in a genomic string (for instance « TAT ») in the following sequence :

ATTGGTGGGCTCTACTAAGATATCAACGGGACTTCGGAGCGTGCCGCACTATTT

Obviously, you can use your favorite programming language and do this kind of search programmatically but is there a way to do it in SQL?

Luckily, the answer is yes!  The solution is simple and looks like this:

SELECT FLOOR(( LENGTH(source) - LENGTH(REPLACE(source, target, '')) ) / (LENGTH(target))) as occ

To come back to our example, « source » being the genomic sequence and « target » being « TAT », you’d have :

SELECT FLOOR(( LENGTH('ATTGGTGGGCTCTACTAAGATATCAACGGGACTTCGGAGCGTGCCGCACTATTT') - LENGTH(REPLACE('ATTGGTGGGCTCTACTAAGATATCAACGGGACTTCGGAGCGTGCCGCACTATTT', 'TAT', '')) ) / (LENGTH('TAT'))) as occ

Here’s the answer!

Fortunately, in life there are way more many solutions than problems!  And sometimes, long SQL queries!

P.S.  This new post will probably interest you a lot!

Update (2019-03-07)

Save

Save

Save

Save

Save


Comment trouver le nombre d’occurrences d’une chaîne de caractères dans MySQL?

4 mars 2012

Il n’existe pas de fonction dans MySQL  (et bien d’autres SGBD) pour trouver le nombre d’occurrences d’une chaîne de caractères dans une autre.  Par exemple, combien de fois « ait » apparaît dans la chaîne « Il était grand mais il avait peur » ?

Ou, comme on me l’a récemment demandé sur IRC, vous cherchez à déterminer le nombre d’occurrences d’une sous-séquence particulière (par exemple, « TAT ») dans la séquence génomique suivante :

ATTGGTGGGCTCTACTAAGATATCAACGGGACTTCGGAGCGTGCCGCACTATTT

Évidemment, vous pouvez lire les données du SGBD puis faire la recherche en mémoire en utilisant votre langage de programmation préféré mais comment faire le tout en SQL ?

La solution est simple et elle a la forme suivante :


SELECT FLOOR(( LENGTH(source) - LENGTH(REPLACE(source, chaineAChercher, '')) ) / (LENGTH(chaineAChercher))) as occ

Pour revenir à notre exemple, la source étant la longue séquence génomique et « chaineAChercher » étant « TAT », cela donnerait :


SELECT FLOOR(( LENGTH('ATTGGTGGGCTCTACTAAGATATCAACGGGACTTCGGAGCGTGCCGCACTATTT') - LENGTH(REPLACE('ATTGGTGGGCTCTACTAAGATATCAACGGGACTTCGGAGCGTGCCGCACTATTT', 'TAT', '')) ) / (LENGTH('TAT'))) as occ

La réponse à notre petit problème ? La voici!

Heureusement dans la vie, il y a plus de solutions que de problèmes… Et parfois de longues requêtes SQL!

P.S. Cet ajout pourrait grandement vous intéresser!

Mise à jour (2019-03-07)