Re: Cómo escribir múltiples 'Contiene' en la consulta SQL¿Qué estás realmente tratando de hacer? ¿Seleccionar algunas filas en una tabla de datos JMP?
Re: Cómo escribir múltiples 'Contiene' en la consulta SQLUtilice SIMILAR A. Para la sintaxis, las siguientes afirmaciones hacen lo mismo. Por supuesto, tendrá que escribir la declaración "SIMILAR A" como una "expresión personalizada" en la sección de filtros del generador de consultas JMP. No creo que pueda generarlo haciendo clic en los elementos del menú del triángulo rojo.
DONDE (("t1" .column1 ME GUSTA '% AAA%') O ("t1" .column1 ME GUSTA '% BBB%'))
DONDE (("t1" .column1 SIMILAR A '% (AAA | BBB)%'))
Re: Cómo escribir múltiples 'Contiene' en la consulta SQLEstá bastante indicado en la primera frase de la pregunta.
Necesito construir dinámicamente una cadena de consulta para extraer datos de la base de datos. Lista de términos de búsqueda y nombre de columna son dinámicos. Para uno de los nombres de columna, la coincidencia no es exacta, por lo que no puedo usar WHERE t1.column1 IN ('qwe', 'rty' ...) y así sucesivamente. En su lugar, tuve que usar la palabra clave LIKE y una construcción muy voluminosa. Estaba buscando un constructo similar a IN (destinado al juego de palabras) en sintaxis. Esta palabra clave es 'SIMILAR A'.
Re: Cómo escribir múltiples 'Contiene' en la consulta SQLParece que está funcionando como lo prometido. Produce idénticos a los resultados de mi solución actual.
Lo uso en JSL, donde armo la cadena de consulta de algún texto y variable. Por ejemplo, t1.column1 también es una variable, y tengo coincidencias parciales para solo una de esas variables para t1.column1, así que tuve que usar algo como esto para una variable:
"WHERE(t1.column1 LIKE '%qwe%') OR
(t1.column1 LIKE '%rty%') OR
(t1.column1 LIKE '%asd%') OR
(t1.column1 LIKE '%fgh%') OR
(t1.column1 LIKE '%zxc%')"<CODE>
por lo que es una cosa bastante compleja para ensamblar algo así desde stringColumnName = "column1" y searchStringArray <SPAN class="token operator"> = </SPAN><SPAN class="token punctuation"> { </SPAN> 'qwe' <SPAN class="token punctuation"> , </SPAN> 'rty' <SPAN class="token punctuation"> , </SPAN> 'asd' <SPAN class="token punctuation"> , </SPAN> 'fgh' <SPAN class="token punctuation"> , </SPAN> 'zxc' <SPAN class="token punctuation"> } </SPAN>
Mientras que para otras variables de columna se trata de una forma mucho más simple de:
<SPAN class="token string">"WHERE
t1."||stringColumnName||" IN (' "</SPAN> <SPAN class="token operator">||</SPAN> <SPAN class="token function">Concat Items</SPAN><SPAN class="token punctuation">(</SPAN>searchStringsArray<SPAN class="token punctuation">,</SPAN> <SPAN class="token string">" ', ' "</SPAN><SPAN class="token punctuation">)</SPAN><SPAN class="token operator">||</SPAN> <SPAN class="token string">" ' )"</SPAN>Ahora gracias a @WhiteMenCanJMP y su SIMILAR para esta tarea de ensamblar una cadena de consulta dinámica será mucho más simple.
Y no se preocupe por la ventana personalizada: de todos modos, escribo en JSL. Aunque el filtro personalizado en el Generador de consultas es la forma más rápida de verificar la sintaxis de todos modos.
Re: Cómo escribir múltiples 'Contiene' en la consulta SQLParece que está funcionando como lo prometido. Produce idénticos a los resultados de mi solución actual.
Lo uso en JSL, donde armo la cadena de consulta de algún texto y variable. Por ejemplo, t1.column1 también es una variable, y tengo coincidencias parciales para solo una de esas variables para t1.column1, así que tuve que usar algo como esto para una variable:
"WHERE(t1.column1 LIKE '%qwe%') OR
(t1.column1 LIKE '%rty%') OR
(t1.column1 LIKE '%asd%') OR
(t1.column1 LIKE '%fgh%') OR
(t1.column1 LIKE '%zxc%')"<CODE>
por lo que es una cosa bastante compleja para ensamblar algo así desde stringColumnName = "column1" y searchStringArray <SPAN class="token operator"> = </SPAN><SPAN class="token punctuation"> { </SPAN> 'qwe' <SPAN class="token punctuation"> , </SPAN> 'rty' <SPAN class="token punctuation"> , </SPAN> 'asd' <SPAN class="token punctuation"> , </SPAN> 'fgh' <SPAN class="token punctuation"> , </SPAN> 'zxc' <SPAN class="token punctuation"> } </SPAN>
Mientras que para otras variables de columna se trata de una forma mucho más simple de:
<SPAN class="token string">"WHERE
t1."||stringColumnName||" IN (' "</SPAN> <SPAN class="token operator">||</SPAN> <SPAN class="token function">Concat Items</SPAN><SPAN class="token punctuation">(</SPAN>searchStringsArray<SPAN class="token punctuation">,</SPAN> <SPAN class="token string">" ', ' "</SPAN><SPAN class="token punctuation">)</SPAN><SPAN class="token operator">||</SPAN> <SPAN class="token string">" ' )"</SPAN><CODE>
Ahora gracias a @WhiteMenCanJMP y su SIMILAR para esta tarea de ensamblar una cadena de consulta dinámica será mucho más simple.
Y no se preocupe por la ventana personalizada: de todos modos, escribo en JSL. Aunque el filtro personalizado en el Generador de consultas es la forma más rápida de verificar la sintaxis de todos modos.
Re: Cómo escribir múltiples 'Contiene' en la consulta SQLParece que está funcionando como lo prometido. Produce idénticos a los resultados de mi solución actual.
Lo uso en JSL, donde armo la cadena de consulta de algún texto y variable. Por ejemplo, t1.column1 también es una variable, y tengo coincidencias parciales para solo una de esas variables para t1.column1, así que tuve que usar algo como esto para una variable:
"WHERE(t1.column1 LIKE '%qwe%') OR
(t1.column1 LIKE '%rty%') OR
(t1.column1 LIKE '%asd%') OR
(t1.column1 LIKE '%fgh%') OR
(t1.column1 LIKE '%zxc%')"
por lo que es una cosa bastante compleja para ensamblar algo así desde stringColumnName = "column1" y searchStringArray = {'qwe', 'rty', 'asd', 'fgh', 'zxc'}
Mientras que para otras variables de columna se trata de una forma mucho más simple de:
"WHERE
t1."||stringColumnName||" IN (' "||Concat Items(searchStringsArray," ', ' ")||" ' )"Ahora gracias a @WhiteMenCanJMP y su SIMILAR para esta tarea de ensamblar una cadena de consulta dinámica será mucho más simple.
Y no se preocupe por la ventana personalizada: de todos modos, escribo en JSL. Aunque el filtro personalizado en el Generador de consultas es la forma más rápida de verificar la sintaxis de todos modos.
Cómo escribir múltiples 'Contiene' en consulta SQLHola todos.
Digamos que tengo una matriz con cadenas que son valores de filas que necesito extraer de DB. Digamos que la matriz es:
searchStringArray = {'qwe', 'rty', 'asd', 'fgh', 'zxc'}Puedo construir mi declaración WHERE en mi consulta de una manera bastante simple:
"WHERE t1.column1 IN ('" || Concat Items (searchStringsArray, "', '") || "')"que cuando se analiza me daría la siguiente cadena:
"DONDE t1.column1 IN ('qwe', 'rty', 'asd', 'fgh', 'zxc')"Pero, ¿qué sucede si mi searchStringArray no tiene cadenas completas sino cadenas parciales?
Necesito simplificar mi script. Actualmente tengo una consulta que tiene múltiples declaraciones Contains, que en SQL se ve así:
"DÓNDE
(t1.column1 LIKE '% qwe%') OR (t1.column1 LIKE '% rty%') OR (t1.column1 LIKE '% asd%') OR (t1.column1 LIKE '% fgh%') OR (t1 .column1 LIKE '% zxc%') "Esto es bastante engorroso de construir a partir de una matriz de cadenas. Me preguntaba si puedo escribir una declaración WHERE equivalente que se parezca a esto:
"DONDE t1.column1 IN ('% qwe%', '% rty%', '% asd%', '% fgh%', '% zxc%')"o algo como esto:
"WHERE t1.column1 MATCH ('% qwe%' OR '% rty%' OR '% asd%' OR '% fgh%' OR '% zxc%')"o algo similar que sería más fácil de construir usando Concat Items (). Intenté dos ejemplos anteriores, aunque parecen ser una sintaxis SQLite válida, no funcionan en JSL. ¿Alguna sugerencia?
Gracias,
METRO