Evaluación insertar SQLHola todos,
Estoy tratando de producir una declaración SQL que traiga solo filas con nombres de identificación coincidentes.
Tengo una lista de usuarios que quiero que Eval inserte en la cadena SQL. el problema es que lo analiza con comillas dobles en lugar de comillas 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' ) ) ;"
Muchas gracias por adelantado.
secuencias de comandosRe: Evaluar insertar SQLuserlist= {"01E1B5C0651EDA80", "F62B70921920FCBE", "909D35028E2039CE"};
sqlstr_ =
"SELECT \!"t1\!".uid
FROM \!"Tables\!".\!"Table\!" \!"t1\!"
WHERE ( \!"t1\!".uid IN ( '^
concatitems(userlist,\!"','\!")
^') )
;";
write(Eval Insert( sqlstr_ ));
Los apóstrofes iniciales y finales se manejan de manera diferente a los apóstrofes interiores; vea justo antes y después de ^, frente a la cadena de separación. Si existe alguna posibilidad de que la lista de usuarios tenga 0 elementos, debe comprobarlo antes de ejecutar la consulta porque probablemente no tenga ningún sentido.
Puede hacerlo un poco más legible usando el otro mecanismo de escape (html no lo sabe, por lo que el color de la sintaxis es incorrecto en la web):
userlist= {"01E1B5C0651EDA80", "F62B70921920FCBE", "909D35028E2039CE"};
sqlstr_ =
"\[
SELECT "t1".uid
FROM "Tables"."Table" "t1"
WHERE ( "t1".uid IN ( '^
concatitems(userlist,"','")
^') );
]\";
write(Eval Insert( sqlstr_ ));
Usar write() para mostrar el resultado también ayuda:
SELECT "t1".uid
FROM "Tables"."Table" "t1"
WHERE ( "t1".uid IN ( '01E1B5C0651EDA80','F62B70921920FCBE','909D35028E2039CE') );
Re: Evaluar insertar SQLgracias @Craige_Hales , esto es muy útil.
la inserción de evaluación ahora funciona correctamente. con respecto al otro mecanismo de escape, es mucho más fácil. Lástima que esta no es la forma en que el software lo escribe.
Tengo otro problema con SQL. me gustaría obtener filas solo donde el valor está compuesto por 16 caracteres alfanuméricos.
la declaración de longitud por sí sola funciona bien. la expresión regular no
sqlstr_uid =
"\[
SELECT DISTINCT "t1".uid
FROM "Tables"."Table" "t1"
WHERE ( (LENGTH ( "t1".uid) = 16) AND ( "t1".uid REGEXP '^[A-Za-z0-9]+$' ) )
]\";
¿me falta un = o corchetes?
¡gracias de nuevo!
Re: Evaluar insertar SQLMirando algunos sitios aleatorios en la web, se ve bien. Sin embargo, no soy un experto en SQL.
Re: Evaluar insertar SQL@ron_horne , prueba REGEXP_LIKE
Re: Evaluar insertar SQLGracias @ErraticAttack ,
no funcionó Me las arreglé para usar esta expresión:
regexp_substr("t1".uid, '^[A-Za-z0-9]+$')="t1".uid )
Re: Evaluar insertar SQL@Craige_Hales
la siguiente expresión regular funciona cuando se envía la instrucción sql como una cadena:
regexp_substr("t1".uid, '^[A-Za-z0-9]+$')="t1".uid )
sin embargo, al enviar esta expresión usando eval insert (sql_str) aparece un error.
el error tiene que ver con el [así que asumo que evel insert está teniendo dificultades con el ^ justo antes.
¿Hay alguna forma de escapar del ^?
lo siguiente muestra el error exacto.
sqlstr_uid =
"\[
SELECT DISTINCT "t1".uid
FROM "Tables"."Table" "t1"
WHERE "t1".uid REGEXP '^[A-Za-z0-9]+$'
]\";
write(Eval Insert( sqlstr_uid ));
¡muchas gracias!
Ron
Re: Evaluar insertar SQLPuede definir qué carácter usar con Eval Insert y sugeriría usar algún otro carácter que no sea el predeterminado ^ si está evaluando cadenas sql (especialmente las que tienen expresiones regulares), generalmente 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, "¤"));
Re: Evaluar insertar SQLMuchísimas gracias @jthi ¡esto es perfecto!
Re: Evaluar insertar SQLEjemplo similar
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", "☺" ));
la prueba
SELECCIONE DISTINTO "t1".uid
DESDE "Tablas"."Tabla" "t1"
DONDE "t1".uid REGEXP '^[A-Za-z0-9]+$'
obras
No parece haber un \! mecanismo de escape en Eval Insert; necesitas elegir un personaje no utilizado.