4D v16.3QUERY BY ATTRIBUTE |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
4D v16.3
QUERY BY ATTRIBUTE
QUERY BY ATTRIBUTE
QUERY BY ATTRIBUTE busca los registros que coincidan con la cadena de consulta definida utilizando los parámetros campoObjeto, rutaAtributo, opBusq y valor, y devuelve una selección de registros para tabla. Nota: para más información sobre los campos Objeto (nuevo en 4D v15), por favor, consulte la sección Tipo de campo Objeto. QUERY BY ATTRIBUTE cambia la selección actual de tabla para el proceso actual y vuelve el primer registro de la nueva selección el registro actual. Si se omite el parámetro tabla, el comando se aplica a la tabla por defecto. Si no se ha definido ninguna tabla por defecto, se produce un error. El parámetro opcional opConj se utilizar para combinar varias llamadas a QUERY BY ATTRIBUTE en caso de búsquedas múltiples. Los operadores de conjunción disponibles son los mismos que los del comando QUERY:
El parámetro opConj no se utiliza para la primera llamada a QUERY BY ATTRIBUTE de una búsqueda múltiple, o si la búsqueda es una búsqueda simple. Si lo omite dentro de una búsqueda múltiple, el operador AND (&) se utiliza por defecto. En campoObjeto, pase el campo objeto cuyos atributos desea buscar. Si pertenece a una tabla Uno relacionada a tabla con una relación automática o manual, el campoObjeto pueden pertenecer a otra tabla.
En rutaAtributo, pase la ruta del atributo cuyos valores desea comparar para cada registro, por ejemplo "niños.niñas.edad". Si pasa un simple nombres, por ejemplo "lugar", designa el atributo correspondiente ubicado en el primer nivel del campo objeto. Notas:
El parámetro opBusq es el operador de comparación que se aplica entre campoObjeto y valor. Puede pasar uno de los símbolos que se muestran aquí:
Nota: se puede especificar el operador de comparación como una expresión texto en lugar de un símbolo. Consulte la descripción del comando QUERY para más información. valor valor es el dato contra el que se va a comparar rutaAtributo. El valor que puede ser cualquier expresión del mismo tipo que rutaAtributo. El valor se evalúa una vez, al inicio de la búsqueda. El valor no se evalúa para cada registro. Para buscar una cadena dentro de una cadena (una búsqueda "contains"), utilice el símbolo arroba (@) en valor para aislar la cadena a buscar, como se muestra en este ejemplo: "@Smith@". Note que en este caso, la búsqueda sólo se beneficia parcialmente desde el índice (compacidad de almacenamiento de datos). Esta es la estructura de una consulta por atributos: QUERY BY ATTRIBUTE([Table] ;[Table]ObjectField ;"attribute1.attribute2";=;value) Nota: un criterio implícito para todos los operadores (excepto #) es que el campo Objeto contiene un atributo. Sin embargo, para el operador #, puede definirse (ver más adelante). Por ejemplo, la siguiente búsqueda devuelve los registros de las personas que tienen un perro cuyo nombre no es Rex (y no los registros de las personas que no tienen un perro, o que tienen un perro sin nombre): Las búsquedas por atributo que utilizan el operador "#" pueden tener resultados diferentes dependiendo de si la propiedad está seleccionada para el campo objeto:
Aquí están las reglas a seguir para la construcción de varias búsquedas por atributo:
Nota: cada tabla mantiene su propia construcción de búsqueda actual. Esto significa que puede crear varias búsquedas simultáneamente, una para cada tabla. No importa la forma en que una búsqueda se haya definido:
Las fechas se almacenan en los objetos en función de los parámetros de la base; por defecto, se tiene en cuenta la zona horaria (ver el selector JSON use local time en el comando SET DATABASE PARAMETER).
!1973-05-22! -> "1973-05-21T23:00:00.000Z" Este ajuste también se tiene en cuenta durante las búsquedas, por lo que no tiene que preocuparse por ello si siempre utiliza su base en el mismo lugar y si los parámetros son los mismos en todos los equipos que acceden a los datos. En este caso, la siguiente búsqueda devolverá correctamente los registros cuyo atributo Birthday sea igual a !1973-05-22! (guardada como "1973-05-21T23:00:00.00Z"): QUERY BY ATTRIBUTE([Persons];[Persons]OB_Info;"Birthday";=;!1973-05-22!) Si no desea utilizar el parámetro GMT, puede modificar estos parámetros utilizando la siguiente instrucción: SET DATABASE PARAMETER(JSON use local time;0) Tenga en cuenta que el alcance de este parámetro está limitado al process. Si ejecuta esta instrucción, el 1 de octubre de 1965 se almacenará "1965-10-01T00: 00: 00.000Z" pero usted deberá ajustar el mismo parámetro antes de lanzar sus búsquedas: SET DATABASE PARAMETER(JSON use local time;0) Puede utilizar la propiedad virtual "longitud" con este comando. Esta propiedad está disponible automáticamente para todos los atributos de tipo array y devuelve el tamaño del array, es decir, el número de elementos que contiene. Se puede utilizar en el contexto de la ejecución del comando QUERY BY ATTRIBUTE (ver ejemplo 4). En este ejemplo, el atributo "age" es una cadena o un entero y queremos encontrar personas cuyas edades estén entre 20 y 29. Las primeras dos líneas buscan el atributo como un entero (>=20 y <30) y las últimas consultan el campo como una cadena (comienza por "2" pero es diferente de "2".) QUERY BY ATTRIBUTE([Persons];[Persons]OB_Info;"age";>=;20;*) El comando QUERY BY ATTRIBUTE se puede utilizar para encontrar registros en los que algunos atributos se definen (o no). Para ello, debe utilizar un objeto vacío. //Buscar los registros donde el correo electrónico se define en el campo objeto //Buscar los registros donde el código postal no está definido en el campo objeto Usted quiere buscar un campo que contiene los atributos array. Con los dos registros siguientes: { "name":"martin", "locations" : [ { "kind":"office", "city":"paris" } ] } , { "name":"smith", "locations" : [ { "kind":"home", "city":"lyon" } , { "kind":"office", "city":"paris" } ] } ... QUERY BY ATTRIBUTE encontrará personas con una ubicación en "paris" utilizando esta instrucción: //indica el atributo array con la sintaxis "[]" Nota: si ha definido varios criterios en el mismo atributo array, los criterios coincidentes no se aplicarán necesariamente al mismo elemento de array. En el siguiente ejemplo, la búsqueda devolverá "smith" porque tiene un elemento "locations" cuyo "kind" es "home" y un elemento "locations" cuya "city" es "paris", Incluso si no es el mismo elemento: QUERY BY ATTRIBUTE([People];[People]OB_Field;"locations[].kind";=;"home";*) Este ejemplo ilustra el uso de la propiedad "longitud" virtual. Su base tiene un campo objeto [Customer]full_Data con los siguientes datos: Usted quiere obtener los registros de los clientes que tienen dos o más hijos. Para ello, se puede escribir: QUERY BY ATTRIBUTE([Customer];[Customer]full_Data;"Children.length";>=;2) Si la búsqueda se lleva a cabo correctamente, la variable sistema OK toma el valor 1.
Ver también
Estructura de los objetos de lenguaje 4D
|
PROPIEDADES
Producto: 4D HISTORIA
Creado por: 4D v15 ARTICLE USAGE
Manual de lenguaje 4D ( 4D v16) |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||