Valutazione inserisce SQLCiao a tutti,
sto cercando di produrre un'istruzione SQL che porterà solo righe con nomi ID corrispondenti.
ho un elenco di utenti che desidero inserire da Eval nella stringa SQL. il problema è che lo analizza con virgolette doppie anziché virgolette singole.
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' ) ) ;"
Grazie mille in anticipo.
Combinazione e pulizia dei datiRi: Valutazione inserire SQLEsempio simile
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", "☺" ));
il test
SELEZIONA DISTINTO "t1".uid
DA "Tabelle"."Tabella" "t1"
DOVE "t1".uid REGEXP '^[A-Za-z0-9]+$'
lavori
Non sembra esserci un \! meccanismo di fuga nell'Eval Insert; devi scegliere un personaggio inutilizzato.
Ri: Valutazione inserire SQLGrazie mille @jthi questo è perfetto!
Ri: Valutazione inserire SQLPuoi definire quale carattere usare con Eval Insert e suggerirei di usare qualche carattere diverso da quello predefinito ^ se stai valutando stringhe SQL (specialmente quelle con regex), di solito uso "¤"
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, "¤"));
Ri: Valutazione inserire SQL@Craige_Hales
la seguente espressione regex funziona quando si invia l'istruzione SQL come stringa:
regexp_substr("t1".uid, '^[A-Za-z0-9]+$')="t1".uid )
tuttavia, quando invio questa espressione utilizzando eval insert (sql_str) ottengo un errore.
l'errore ha a che fare con [ quindi presumo che evel insert abbia difficoltà con ^ appena prima.
c'è un modo per sfuggire a ^ ?
quanto segue mostra l'errore esatto.
sqlstr_uid =
"\[
SELECT DISTINCT "t1".uid
FROM "Tables"."Table" "t1"
WHERE "t1".uid REGEXP '^[A-Za-z0-9]+$'
]\";
write(Eval Insert( sqlstr_uid ));
grazie molto!
Ron
Ri: Valutazione inserire SQLGrazie @ErraticAttack ,
non ha funzionato. sono riuscito a usare questa espressione:
regexp_substr("t1".uid, '^[A-Za-z0-9]+$')="t1".uid )
Ri: Valutazione inserire SQL@ron_horne , prova REGEXP_LIKE
Ri: Valutazione inserire SQLGuardando alcuni siti a caso sul web, sembra giusto. Non sono un esperto di SQL però.
Ri: Valutazione inserire SQLGrazie @Craige_Hales , questo è molto utile.
l'inserto di valutazione ora funziona correttamente. rispetto all'altro meccanismo di fuga è molto più semplice. peccato che questo non sia il modo in cui lo scrive il software.
Ho un altro problema con SQL. vorrei ottenere solo le righe in cui il valore è composto da 16 caratteri alfanumerici.
l'istruzione length da sola funziona bene. la regex no
sqlstr_uid =
"\[
SELECT DISTINCT "t1".uid
FROM "Tables"."Table" "t1"
WHERE ( (LENGTH ( "t1".uid) = 16) AND ( "t1".uid REGEXP '^[A-Za-z0-9]+$' ) )
]\";
mi manca un = o parentesi?
grazie ancora!
Ri: Valutazione inserire SQLuserlist= {"01E1B5C0651EDA80", "F62B70921920FCBE", "909D35028E2039CE"};
sqlstr_ =
"SELECT \!"t1\!".uid
FROM \!"Tables\!".\!"Table\!" \!"t1\!"
WHERE ( \!"t1\!".uid IN ( '^
concatitems(userlist,\!"','\!")
^') )
;";
write(Eval Insert( sqlstr_ ));
Gli apostrofi iniziali e finali vengono gestiti diversamente dagli apostrofi interni; vedere appena prima e dopo ^, rispetto alla stringa separatore. Se esiste la possibilità che l'elenco utenti possa avere 0 elementi, dovresti verificarlo prima di eseguire la query perché probabilmente non avrà alcun senso.
Puoi renderlo un po' più leggibile usando l'altro meccanismo di escape (html non lo sa quindi la colorazione della sintassi è sbagliata sul web):
userlist= {"01E1B5C0651EDA80", "F62B70921920FCBE", "909D35028E2039CE"};
sqlstr_ =
"\[
SELECT "t1".uid
FROM "Tables"."Table" "t1"
WHERE ( "t1".uid IN ( '^
concatitems(userlist,"','")
^') );
]\";
write(Eval Insert( sqlstr_ ));
Anche l'uso di write() per visualizzare il risultato aiuta:
SELECT "t1".uid
FROM "Tables"."Table" "t1"
WHERE ( "t1".uid IN ( '01E1B5C0651EDA80','F62B70921920FCBE','909D35028E2039CE') );