Évaluer insérer SQLSalut tout le monde,
j'essaie de produire une instruction SQL qui n'apportera que des lignes avec des noms d'identifiant correspondants.
J'ai une liste d'utilisateurs que je souhaite insérer dans la chaîne SQL. Le problème est qu'il l'analyse avec des guillemets doubles au lieu de guillemets simples.
Names default to here (1);<BR />// got the userlist from a data table using dt:users << get as matrix<BR />userlist = {"01E1B5C0651EDA80", "F62B70921920FCBE", "909D35028E2039CE", "B339888591CF1346"};
<BR />// define an SQL string to host the list of user ids
sqlstr_ =
"SELECT \!"t1\!".uid
FROM \!"Tables\!".\!"Table\!" \!"t1\!"
WHERE ( \!"t1\!".uid IN ( ^userlist^) )
;";
Eval Insert( sqlstr_logs );
// i get the following non working SQL string
"SELECT \!"t1\!".uid
FROM \!"Tables\!".\!"Table\!" \!"t1\!"
WHERE ( \!"t1\!".uid IN ( {\!"01E1B5C0651EDA80\!", \!"F62B70921920FCBE\!", \!"909D35028E2039CE\!", }) )
;"
// i would like to get the following working SQL statement
"SELECT \!"t1\!".uid
FROM \!"Tables\!".\!"Table\!" \!"t1\!"
WHERE ( \!"t1\!".uid IN ( '01E1B5C0651EDA80' , 'F62B70921920FCBE' , 'F62B70921920FCBE' ) ) ;"
Merci beaucoup d'avance.
Mélange et nettoyage des donnéesRe : Évaluer l'insertion SQLExemple similaire
sqlstr_uid =
"\[
SELECT DISTINCT "t1".uid
FROM "Tables"."Table" "t1"
WHERE "t1".uid REGEXP '^[A-Za-z0-9]+$'
]\";
write(Eval Insert( "the test ☺sqlstr_uid☺ works", "☺" ));
le test
SELECTIONNER DISTINCT "t1".uid
DE "Tableaux". "Tableau" "t1"
OÙ "t1".uid REGEXP '^[A-Za-z0-9]+$'
travaux
Il ne semble pas y avoir de message \! mécanisme d'échappement dans Eval Insert ; vous devez choisir un personnage inutilisé.
Re : Évaluer l'insertion SQLmerci beaucoup @jthi c'est parfait!
Re : Évaluer l'insertion SQLVous pouvez définir le caractère à utiliser avec Eval Insert et je suggérerais d'utiliser un autre caractère que celui par défaut ^ si vous évaluez des chaînes SQL (en particulier celles avec regex), j'utilise généralement "¤"
Names Default To Here(1);
sqlstr_uid =
"\[
SELECT DISTINCT "t1".uid
FROM "Tables"."Table" "t1"
WHERE "t1".uid REGEXP '^[A-Za-z0-9]+$'
]\";
Write(Eval Insert(sqlstr_uid, "¤"));
Re : Évaluer l'insertion SQL@Craige_Hales
l'expression regex suivante fonctionne lors de la soumission de l'instruction SQL sous forme de chaîne :
regexp_substr("t1".uid, '^[A-Za-z0-9]+$')="t1".uid )
pourtant, lors de la soumission de cette expression à l'aide de eval insert (sql_str), j'obtiens une erreur.
l'erreur est liée au [ donc je suppose que evel insert a du mal avec le ^ juste avant.
existe-t-il un moyen d'échapper au ^ ?
ce qui suit montre l’erreur exacte.
sqlstr_uid =
"\[
SELECT DISTINCT "t1".uid
FROM "Tables"."Table" "t1"
WHERE "t1".uid REGEXP '^[A-Za-z0-9]+$'
]\";
write(Eval Insert( sqlstr_uid ));
merci beaucoup!
Ron
Re : Évaluer l'insertion SQLMerci @ErraticAttack ,
ça n'a pas marché. j'ai réussi à utiliser cette expression :
regexp_substr("t1".uid, '^[A-Za-z0-9]+$')="t1".uid )
Re : Évaluer l'insertion SQL@ron_horne , essayez REGEXP_LIKE
Re : Évaluer l'insertion SQLEn regardant certains sites aléatoires sur le Web, cela semble correct. Je ne suis cependant pas un expert SQL.
Re : Évaluer l'insertion SQLmerci @Craige_Hales , c'est très utile.
l'insert d'évaluation fonctionne désormais correctement. par rapport à l’autre mécanisme d’échappement, c’est beaucoup plus simple. dommage que ce ne soit pas ainsi que le logiciel l'écrit.
J'ai un autre problème avec SQL. je voudrais obtenir des lignes uniquement où la valeur est composée de 16 caractères alphanumériques.
l'instruction de longueur en elle-même fonctionne bien. l'expression régulière ne le fait pas
sqlstr_uid =
"\[
SELECT DISTINCT "t1".uid
FROM "Tables"."Table" "t1"
WHERE ( (LENGTH ( "t1".uid) = 16) AND ( "t1".uid REGEXP '^[A-Za-z0-9]+$' ) )
]\";
est-ce qu'il me manque un = ou des parenthèses ?
Merci encore!
Re : Évaluer l'insertion SQLuserlist= {"01E1B5C0651EDA80", "F62B70921920FCBE", "909D35028E2039CE"};
sqlstr_ =
"SELECT \!"t1\!".uid
FROM \!"Tables\!".\!"Table\!" \!"t1\!"
WHERE ( \!"t1\!".uid IN ( '^
concatitems(userlist,\!"','\!")
^') )
;";
write(Eval Insert( sqlstr_ ));
Les apostrophes de début et de fin sont traitées différemment des apostrophes intérieures ; voir juste avant et après le ^, par rapport à la chaîne de séparation. S'il est possible que la liste d'utilisateurs contienne 0 élément, vous devez le vérifier avant d'exécuter la requête, car cela n'aura probablement aucun sens.
Vous pouvez le rendre un peu plus lisible en utilisant l'autre mécanisme d'échappement (html ne le sait pas donc la coloration syntaxique est fausse sur le web) :
userlist= {"01E1B5C0651EDA80", "F62B70921920FCBE", "909D35028E2039CE"};
sqlstr_ =
"\[
SELECT "t1".uid
FROM "Tables"."Table" "t1"
WHERE ( "t1".uid IN ( '^
concatitems(userlist,"','")
^') );
]\";
write(Eval Insert( sqlstr_ ));
Utiliser write() pour afficher le résultat est également utile :
SELECT "t1".uid
FROM "Tables"."Table" "t1"
WHERE ( "t1".uid IN ( '01E1B5C0651EDA80','F62B70921920FCBE','909D35028E2039CE') );