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. P>
Merci! P>
5 Réponses :
Bonjour martyix strong>, Oui, SQLite3 a une fonction que vous pouvez utiliser pour inverser les chaînes. P> Imaginez que vous avez une table nommée mytable em> comme celui-ci. p> Strings inverse dans SQLite H1>
Conditions H2>
exemple h2>
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;
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.
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
J'ai résolu mon problème stockant des inverses de mots que j'ai obtenus via ce script php:
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;
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
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 [...]
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!