9
votes

SQLite - Fonction de chaîne inverse

Y a-t-il une fonction pour inverser la chaîne dans SQLite? Je suis incapable de trouver quoi que ce soit dans la documentation.

Merci!


2 commentaires

Je pense que vous devrez peut-être écrire votre propre extension pour cela. Pouvez-vous nous dire pourquoi vous devez inverser une chaîne dans SQL? Il pourrait y avoir une meilleure façon d'y arriver.


Je voulais juste faire un travail unique dans SQLite. Je peux le programmer en PHP ou dans une autre langue. Merci!


5 Réponses :


1
votes

Bonjour martyix strong>,

Oui, SQLite3 a une fonction que vous pouvez utiliser pour inverser les chaînes. P>

Strings inverse dans SQLite H1>

Conditions H2>
  1. Vous devez connaître la longueur de la chaîne. LI>
  2. Si vous voulez inverser toutes les cordes dans une colonne, toutes les chaînes doivent forte> de la même longueur. li> ol>

    exemple h2>

    Imaginez que vous avez une table nommée mytable em> comme celui-ci. p>

    CREATE VIEW reversed AS
        SELECT myField,
            SUBSTR(myField,-1,1)||
            SUBSTR(myField,-2,1)||
            SUBSTR(myField,-3,1)||
            SUBSTR(myField,-4,1)||
            SUBSTR(myField,-5,1)||
            SUBSTR(myField,-6,1)||
            SUBSTR(myField,-7,1)||
            SUBSTR(myField,-8,1) 'reversed' 
        FROM myTable;
    


2 commentaires

Et si les chaînes sont de 1000 caractères, je pense que vos collègues commenceront à soumettre au quotidien WTF, même avant que vous n'ayez fini de taper la requête :)


@LarsB: Oui, je peux faire cela de cette façon, mais mes chaînes ne sont pas une longueur fixe. J'apprécie vraiment le temps que vous avez passé à écrire la réponse, mais malheureusement, cela ne m'aidera pas dans ma tâche.



9
votes

Il n'y a pas de fonction intégrée pour cela. Vous pouvez ajouter une fonction personnalisée, comme dans cet exemple dans Python:

import sqlite3
conn = sqlite3.connect("")

conn.create_function("strrev", 1, lambda s: s[::-1])

cur = conn.cursor()
cur.execute(r''' SELECT strrev('hello, world') ''')
print(cur.fetchone()[0]) #dlrow ,olleh


0 commentaires

1
votes

J'ai résolu mon problème stockant des inverses de mots que j'ai obtenus via ce script php: xxx


0 commentaires

6
votes

Utilisation d'une expression de table commune Il est possible d'inverser une chaîne en SQLite.

WITH reverse(i, c) AS (
    values(-1, '')
    UNION ALL SELECT i-1, substr('dlrow olleh', i, 1) AS r FROM reverse
    WHERE r!=''
) SELECT group_concat(c, '') AS reversed FROM reverse;


4 commentaires

Cela semble être une excellente solution, mais la chaîne d'entrée n'est pas variable. Comment adapter cette solution à travailler avec une entrée arbitraire?


@tohuwawohu Quel est l'entrée exacte?


Une valeur de texte simple (désolé, "entrée arbitraire" n'était pas précise). Je ne sais tout simplement pas comment utiliser le CTE en relation avec une déclaration de sélection simple. Je suppose que je dois remplacer la clause "GROUP_CONCAT (C,") "?


remplacer la chaîne dans substrateur



-2
votes

Comme d'autres ont déjà expliqué, les substruisements avec un premier paramètre négatif renvoient du texte inversé. Cela pourrait être utilisé avec la longueur pour ne pas dépendre de la connaissance de la longueur réelle du champ. Donc:

SELECT SUBSTR(myfield , -LENGTH (myfield), LENGTH (myfield)) as inverted_myfield FROM [...]


0 commentaires