Archivo

Archivo para la categoría ‘DATABASE’

ORACLE OLAP

Sábado, 24 de Mayo de 2008 Neozeratul 1 comentario

INTRODUCCIÓN

Las herramientas de generación de informes y consultas adhoc generalmente se despliegan utilizando datawarehouses y herramientas basadas en SQL, mientras que aplicaciones más sofisticadas de análisis y planificación se despliegan utilizando otras bases de datos y herramientas.
Esta separación entre data warehouses y bases de datos analíticas es, sin embargo, costosa. El coste de mantenimiento de bases de datos separadas supone recursos adicionales hardware y administradores.

Oracle elimina estas barreras proporcionando una base de datos preparada para el análisis. Oracle OLAP, parte de la base de datos Oracle, proporciona la funcionalidad analítica de una base de datos especializada a la vez que elimina la necesidad de gestionar bases de datos separadas.

ORACLE RELATIONAL–MULTIDIMENSIONAL DATABASE

Oracle cambia el planteamiento tradicional ofreciendo una base de datos integrada relacional-multidimensional. Oracle RDBMS-MDDS elimina la decisión entre gestionabilidad y rendimiento-poder analítico. Oracle simplifica el proceso y reduce el coste de mantenimiento de los datos, a la vez que se mantiene la habilidad de hacer complejas consultas analíticas y proporciona un rendimiento excelente.

ORACLE OLAP


Arquitectura con base de datos Oracle integrada.

Oracle OLAP es parte de una plataforma integrada de data warehousing y business intelligence que contiene funcionalidad ETL, OLAP y data mining en la base de datos. Hay muchos beneficios derivados de tener una base de datos RDBMS-MDDS completamente integrada en comparación con bases de datos multidimensionales y separadas:

· Gestión más simple

· Alta disponibilidad

· Seguridad mejorada

· Acceso abierto desde clientes SQL y OLAP API

· Ciclo de información reducido

· Mayor fiabilidad de la información

FUNCIONALIDAD ORACLE OLAP

La base de datos relacional-multidimensional Oracle se compone de tres tecnologías:

· La tecnología relacional gestiona los objetos de base de datos y proporciona una interfaz SQL a los datos.

· La tecnología de objetos permite a la base de datos gestionar datos no relacionales.

· La tecnología OLAP proporciona funcionalidad analítica avanzada en el contexto de un modelo multidimensional.

Componentes Oracle Database OLAP

SQL puede acceder a datos multidimensionales a través de funciones de tabla o vistas relacionales. Usando aplicaciones PL/SQL, SQL pueden interactuar directamente con el motor multidimensional.

PROCESO DE BASE DE DATOS INTEGRADO

Todas las tecnologías — relacional, objetos y OLAP — están contenidas en un solo proceso; la base de datos se trata como una sola instancia integrada.
Como la tecnología OLAP es parte de un solo proceso de base de datos, proporciona la misma escalabilidad y fiabilidad que el proceso de base de datos Oracle.

ALMACENAMIENTO DE DATOS RDBMS-MDDS INTEGRADO

En Oracle todos los datos — relacional y multidimensional — se almacenan en los ficheros de datos Oracle. No hay ficheros multidimensionales separados que debamos gestionar. Los tipos de datos relacional y multidimensional pueden coexistir en los mismos ficheros de datos. Los datos multidimensionales se almacenan en la base de datos en lo que se llaman analytic workspaces.

MODELO DE DATOS MULTIDIMENSIONAL

Oracle OLAP esta basado en un modelo de datos multidimensional,. Éste se presenta como un modelo lógico a través de las OLAP API y OLAP DML.

MODELO LÓGICO EN LA OLAP API

El modelo multidimensional proporciona algunos beneficios al usuario de las aplicaciones analíticas. Los más importantes son:

· Es fácilmente entendible por los usuarios no expertos.

· Proporciona el contexto para la selección de datos.

· Simplifica el proceso de  definición de cáluclos hasta que usuarios no expertos pueden usar el lenguaje de cálculo.

El modelo multidimensional lógico se presenta a través de las OLAP API y OLAP DML con los siguientes elementos:

· Medidas

· Dimensiones

· Niveles

· Jerarquías

· Atributos

Una medida representa hechos. Ventas en euros y ventas unitarias son ejemplos de medidas. Una medida es análoga a una columna de hechos en una tabla de hechos, pero el catálogo OLAP proporciona meta datos más completos para describirlo. Las dimensiones proporcionan la estructura a los datos organizándolos en niveles y jerarquías, y proporcionándoles atributos. Algunos ejemplos de dimensiones son Producto, Geografía, Tiempo, etc…

MODELO FÍSICO EN LOS ANALYTIC WORKSPACES

Como los analytic workspaces almacenan datos, se necesita un modelo físico de base de datos para organizarlos datos. Oracle OLAP usa un modelo multidimensional como base para el modelo físico en los analytic workspaces. Este modelo proporciona beneficios importantes:

· El modelo fuerza la integridad referencial. Por ejemplo, no es posible que las medidas contengan claves que no referencien valores válidos en una dimensión.

· El modelo favorece la consistencia de datos al facilitar la reutilización de dimensiones con múltiples medidas.

· El orden de los miembros de las dimensiones se mantiene. Esto simplifica los cálculos como por ejemplo el análisis de series temporales. Cuando el orden de los miembros de las dimensiones se mantiene, las funciones pueden usar la posición de un miembro de una dimensión, por lo que se simplifica la definición de los cálculos y se reduce la necesidad de atributos dimensionales.
Por ejemplo, “un año antes” se puede expresar como ‘lag(time 12 time)’, así se elimina la necesidad de atributos ‘un año antes’ calculados y que formen parte del proceso ETL.

· Toda la base de datos se presenta como precalculada, sin tener en cuenta si los datos se han precalculado o se calculan en tiempo ejecución. Las aplicaciones no necesitan especificar reglas de agregación o joins cuando consultan la base de datos. Las aplicaciones SQL no se preocupan de cómo los datos están precalculados, simplemente consultan los datos.

CONCLUSIÓN

Oracle OLAP representa un cambio fundamental en la tecnología OLAP. Las bases de datos relacionales y multidimensionales se han unido para proporcionar capacidades analíticas propias de una base de datos multidimensional en el contexto de la base de datos Oracle.

Las ventajas de un RDBMS-MDDS son:

· Gestión más simple

· Proporciona la alta disponibilidad de un servidor corporativo

· Mayor seguridad

· Ofrece el acceso más abierto

· El ciclo de información se reduce

· Se elimina la sincronización de los datos

Todas estas ventajas se obtienen a la vez que se mantiene la potencia de un servidor OLAP dedicado. Oracle

OLAP proporciona un conjunto de funciones analíticas a través de la OLAP API, un motor multidimensional

y un lenguaje de manipulación de datos OLAP.

El resultado es un sistema de menor coste, más seguro y fiable, que da soporte a aplicaciones analíticas, de

consulta y de generación de informes.

Categories: DATABASE, ORACLE Tags: , ,

Mas de 120 Herramientas y Recursos Para El Desarrollo Web

Lunes, 20 de Agosto de 2007 Neozeratul Sin comentarios

Esta recopilación hecha por Mashable ya tiene un tiempecito que se publicó pero vale la pena mencionarla y es que esta ves se trata de una recopilación de mas de 120 herramientas y recursos para los desarrolladores web, y como yo soy uno de ellos esta lista se me hace muy interesante y  muy útil y me ha permitido descubrir nuevos sitios y herramientas para posteriores tareas. Asi que les recomiendo guardar el enlace nunca se sabe cuando nos puedan ayudar.

La lista contiene las siguientes categorías:

Recursos Generales y Referencias.

  • Herramientas generales de desarollo.
  • Constructores de Aplicaciones.
  • Repositorios y Buscadores de Código y Snippets.
  • Ambientes de desarollo y FrameWorks
  • APIs y Mashups
  • Pruebas, Seguimiento de Errores y Administración de Proyectos.
  • Recursos y Herramientas para Ruby y Ruby on Rails.
  • Herramientas y Recursos de Ajax.
  • Herramientas y Recursos para PHP.
  • Herramientas y Recursos para Flash.
  • Herramientas y Recuros para Python.

Como ven la lista esta bastante completa y es seguro que alguno de esos sitios nos sirve de algo.

Enlace: Web Development Toolbox: 120+ Web Development Resources

Fuente: Webadictos

Categories: AJAX, CSS, INTERNET, MySQL, NOTICIAS, PHP, PROGRAMACION Tags:

5 Expresiones Regulares Muy Útiles para El Desarrollador Web

Jueves, 9 de Agosto de 2007 Neozeratul Sin comentarios

En Sentido Web han publicado 5 expresiones regulares que nos pueden ser útiles a todos los desarrolladores web y es que con una sola expresion regular bien implementada podemos ahorrarnos varias lineas de código.

Comprobar que una cadena solo contenga carateres alfanumericos y que la longitud este entre 3 y 16.

  1. /^[a-zA-Z0-9_]{3,16}$/

Ejemplo de Uso en PHP

  1. function validate_username( $username ) {

  2. if(preg_match(‘/^[a-zA-Z0-9_]{3,16}$/’, $_GET[‘username’])) {

  3. return true;

  4. }

  5. return false;

  6. }

Encontrar una etiqueta XHTML o XML

  • {<tag[^>]*>(.*?)</tag>}

Etiqueta XHTML o XML con atributos

  • {<tag[^>]*attribute\s*=\s*([”‘])value\\1[^>]*>(.*?)</tag>}

Verificar Dirección de Correo Electrónico (Email)

  1. function is_valid_email_address($email){

  2. $qtext = ‘[^\x0d\x22\x5c\x80-\xff]’;

  3. $dtext = ‘[^\x0d\x5b-\x5d\x80-\xff]’;

  4. $atom = ‘[^\x00-\x20\x22\x28\x29\x2c\x2e\x3a-\x3c’.

  5. \x3e\x40\x5b-\x5d\x7f-\xff]+’;

  6. $quoted_pair = \x5c[\x00-\x7f]’;

  7. $domain_literal = \x5b($dtext|$quoted_pair)*\x5d”;

  8. $quoted_string = \x22($qtext|$quoted_pair)*\x22″;

  9. $domain_ref = $atom;

  10. $sub_domain = “($domain_ref|$domain_literal)”;

  11. $word = “($atom|$quoted_string)”;

  12. $domain = “$sub_domain(\x2e$sub_domain)*”;

  13. $local_part = “$word(\x2e$word)*”;

  14. $addr_spec = “$local_part\x40$domain”;

  15.  

  16. return preg_match(“!^$addr_spec$!”, $email) ? 1 : 0;

  17. }

Validar URL 

  1. {

  2. \b

  3. # Match the leading part (proto://hostname, or just hostname)

  4. (

  5. # http://, or https:// leading part

  6. (https?)://[-\w]+(\.\w[-\w]*)+

  7. |

  8. # or, try to find a hostname with more specific sub-expression

  9. (?i: [a-z0-9] (?:[-a-z0-9]*[a-z0-9])? \. )+ # sub domains

  10. # Now ending .com, etc. For these, require lowercase

  11. (?-i: com\b

  12. | edu\b

  13. | biz\b

  14. | gov\b

  15. | in(?:t|fo)\b # .int or .info

  16. | mil\b

  17. | net\b

  18. | org\b

  19. | [a-z][a-z]\.[a-z][a-z]\b # two-letter country code

  20. )

  21. )

  22.  

  23. # Allow an optional port number

  24. ( : \d+ )?

  25.  

  26. # The rest of the URL is optional, and begins with /

  27. (

  28. /

  29. # The rest are heuristics for what seems to work well

  30. [^.!,?;\’&lt;&gt;()[]{}sx7F-\xFF]*

  31. (

  32. [.!,?]+ [^.!,?;”\���&lt;&gt;()\[\]{\}s\x7F-\xFF]+

  33. )*

  34. )?

  35. }ix

Categories: MySQL, PROGRAMACION Tags:

Sentencias en MySQL Que Tal Ves No Conocias

Jueves, 9 de Agosto de 2007 Neozeratul 1 comentario

MySQL Query Browser viene una lista de funciones separadas por tipos que nos pueden ser de mucha utilidad y que muchas veces ni siquiera sabemos que existen, bien pues me dispuse a revisar las funciones que me presentaba dicha lista y me encontre con que mySQL nos puede ahorrar lineas de código si sabemos utilizarlo.Algunas sentencias que me encontre son las siguientes:

Funciones para el control de flujo

Sentencia IF

Algo que nos puede ser util cuando trabajamos con banderas, se me ocurre por ejemplo cuando tenemos un campo llamado publicado donde 0=No publicado y 1= Publicado a nosotros nos interesara mostrar en pantalla un texto y no el valor (0,1) de la bandera bien podriamos hacer una consulta como la siguiente:

  1. SELECT IF(t.publicado=1,‘Si’,‘No’) AS publicado FROM tabla t;

CASE

Creo que todos los que hemos programado sabemos para que es un case por lo que obviare la explicación.

Sintaxis:

CASE [valor] WHEN [condicion] THEN resultado [WHEN [condicion] THEN resultado…] [ELSE resultado] END

Ejemplo de Uso:

  1. SELECT CASE WHEN 1&gt;0 THEN ‘mayor’ ELSE ‘menor’ END;

Nos imprimiría en pantalla “mayor”

Otro ejemplo:

  1. SELECT CASE 1 WHEN 1 THEN ‘uno’ WHEN 2 THEN ‘dos’ ELSE ‘otro’ END;

Nos imprimiría en pantalla “uno”

Operaciones Con Cadenas

CHAR()
Interpreta cada argumento N como un entero y devuelve una cadena que consiste en lo valores en ascii de dichos enteros. Los valores nulos no son tomados en cuenta.

Sintaxis: CHAR(N,…)

Ejemplo:

  1. SELECT CHAR(77,121,83,81,‘76′);

Imprime en pantalla “MySQL”

CONCAT

Te devuelve la cadena resultante de concatenar los argumentos pasados en la función. Puede tener mas de un argumento.

Sintaxis: CONCAT(cadena1,cadena2,…)

Ejemplo de uso:

  1. SELECT CONCAT(‘My’, ‘S’, ‘QL’);

Imprime: MySQL

  1. SELECT u.usuario, CONCAT(u.ciudad,‘, ‘,u.estado,‘, ‘,u.pais) AS localizacion FROM usuarios u;

Mostrará en pantalla un listado de los usuarios junto con un campo localización que es el resultado de concatenar ciudad, estado y pais.

REPLACE

Sintaxis: REPLACE(cadena,cadena_buscada,valor_para_reemplazar)

Devuelve una cadena con todas las ocurrencias de ‘cadena_buscada’ reemplazadas por ‘valor_para_reemplazar’

Ejemplo:

  1. SELECT REPLACE(‘www.mysql.com’, ‘w’, ‘Ww’);

Imprime: ‘WwWwWw.mysql.com’

TRIM

Una función que seguramente la mayoria de nosotros hemos utilizado en php o su equivalencia en algun otro lenguaje, MySQL tambien nos la proporciona y yo para ser sincero ni lo sabia.

Sintaxis: TRIM([{BOTH | LEADING | TRAILING} [remstr] FROM] str), TRIM([remstr FROM] str)

Devuelve la cadena str con todos los prefijos o sufijos remstr eliminados. Si ninguno de los parametros BOTH, LEADING, or TRAILING es proporcionado,
se asume el parámetro BOTH. remstr es opcional y, si ninguno es especificado, todos los espacios en blanco son removidos.

Ejemplo:

  1. SELECT TRIM(‘  cadena   ’);

Imprime: cadena

  1. SELECT TRIM(LEADING ‘a’ FROM ‘aaavaloraaa’);

Imprime: valoraaa

  1. SELECT TRIM(BOTH ‘a’ FROM ‘aaavaloraaa’);

Imprime: valor

  1. SELECT TRIM(TRAILING ‘xyz’ FROM ‘cadenaxxyz’);

Imprime: cadena

REPEAT

Sintaxis: REPEAT(str,n)

Devuelve una cadena que consiste en la cadena str repetida n veces. Si n es menor que 1, devuelve una cadena vacia. Devuelve NULL si str o n son NULL

Ejemplo:

  1. SELECT REPEAT(‘MySQL’, 3);

Imprime MySQLMySQLMySQL

Operaciones con Fechas

Muchas veces tenemos una fecha y deseamos calcular una fecha sumando o restandole cierto número de dias para esto tenemos una sentencia de MySQL que nos permite hacer eso.

DATE_ADD y DATE_SUB

Sintaxis: DATE_ADD(date,INTERVAL expr unit), DATE_SUB(date,INTERVAL expr unit)

Estas funciones ejecutan funciones aritmeticas sobre la fecha. date es un valor DATETIME o DATE especificando la fecha de inicio. expr es una expresion especificando el valor del intervalo a ser sumado o restado de la fecha de inicio. expr es una cadena; puede comenzar con un signo ‘-’ para los intervalos negativos. unit es una palabra clave indicando la unidad en la cual la expresion debe ser interpretada.

Los siguientes son los valores que puede tener el parametro expr unit.

unit Valor Formato para expr
MICROSECOND MICROSECONDS
SECOND SECONDS
MINUTE MINUTES
HOUR HOURS
DAY DAYS
WEEK WEEKS
MONTH MONTHS
QUARTER QUARTERS
YEAR YEARS
SECOND_MICROSECOND 'SECONDS.MICROSECONDS'
MINUTE_MICROSECOND 'MINUTES.MICROSECONDS'
MINUTE_SECOND 'MINUTES:SECONDS'
HOUR_MICROSECOND 'HOURS.MICROSECONDS'
HOUR_SECOND 'HOURS:MINUTES:SECONDS'
HOUR_MINUTE 'HOURS:MINUTES'
DAY_MICROSECOND 'DAYS.MICROSECONDS'
DAY_SECOND 'DAYS HOURS:MINUTES:SECONDS'
DAY_MINUTE 'DAYS HOURS:MINUTES'
DAY_HOUR 'DAYS HOURS'
YEAR_MONTH 'YEARS-MONTHS'

Ejemplos:

  1. SELECT ‘1997-12-31 23:59:59′ + INTERVAL 1 SECOND;

  2. #IMPRIME ‘1998-01-01 00:00:00′

  3. SELECT INTERVAL 1 DAY + ‘1997-12-31′;

  4. #IMPRIME ‘1998-01-01′

  5. SELECT ‘1998-01-01′ – INTERVAL 1 SECOND;

  6. #IMPRIME ‘1997-12-31 23:59:59′

  7. SELECT DATE_ADD(‘1997-12-31 23:59:59′,INTERVAL 1 SECOND);

  8. #IMPRIME ‘1998-01-01 00:00:00′

  9. SELECT DATE_ADD(‘1997-12-31 23:59:59′,INTERVAL 1 DAY);

  10. #IMPRIME ‘1998-01-01 23:59:59′

  11. SELECT DATE_ADD(‘1997-12-31 23:59:59′,INTERVAL ‘1:1′ MINUTE_SECOND);

  12. #IMPRIME ‘1998-01-01 00:01:00′

  13. SELECT DATE_SUB(‘1998-01-01 00:00:00′,INTERVAL ‘1 1:1:1′ DAY_SECOND);

  14. #IMPRIME ‘1997-12-30 22:58:59′

  15. SELECT DATE_ADD(‘1998-01-01 00:00:00′,INTERVAL ‘-1 10′ DAY_HOUR);

  16. #IMPRIME ‘1997-12-30 14:00:00′

  17. SELECT DATE_SUB(‘1998-01-02′, INTERVAL 31 DAY);

  18. #IMPRIME ‘1997-12-02′

  19. SELECT DATE_ADD(‘1992-12-31 23:59:59.000002′,INTERVAL ‘1.999999′ SECOND_MICROSECOND);

  20. #IMPRIME ‘1993-01-01 00:00:01.000001′

  21.  

Estas son algunas de las funciones que me parecieron que pudieran servirnos mas a menudo y que nos evitarian un poco de lineas de código en nuestra programación, espero les sirvan de algo.

Actualización:

INSERT IGNORE

Sintaxis: INSERT IGNORE INTO tabla (campo1,campo2) VALUES (valor1,valor)

Intenta insertar, pero ignora los posibles errores que se puedan producir, por ejemplo, como consecuencia de alguna PRIMARY KEY duplicada.
Ejemplo:
INSERT IGNORE into tabla(id) VALUES (3);

Si el valor 3 correspondia al campo de la clave primaria y dicho valor ya existía en la tabla, no se producirá un error (como es el caso del INSERT “normal”), sino que sencillamente se insertarán 0 filas y no devolverá ningún error.

INSERT … ON DUPLICATE KEY UPDATE

Si especificamos ON DUPLICATE KEY UPDATE en nuestra consulta, y una fila es insertada que puede causar duplicidad con alguna llave primaria o indice unico en nuestra tabla, se realiza una actualización al registro.

Ejemplo:

  1. INSERT INTO TABLE (a,b,c) VALUES (1,2,3)   ON DUPLICATE KEY UPDATE c=c+1;

  2.  

  3. #Seria lo mismo que hacer una consulta update como la siguiente

  4.  

  5. UPDATE TABLE SET c=c+1 WHERE a=1;

Saludos.

Categories: MySQL, PROGRAMACION Tags:

Usando expresiones regulares con MySQL

Jueves, 9 de Agosto de 2007 Neozeratul Sin comentarios

MySQL es un gran motor de bases de datos y pese a ser uno de los más usados en la red, no se le aprovecha todo su potencial. Hoy Hector nos comentaba como pulir nuestro server MySQL para conseguir optimizar el rendimiento de nuestro servidor. De esta forma nos acercabamos un poco más a la parte más técnica del motor de base de datos.Ahora vamos a ver un herramienta que el propio lenguaje SQL sobre MySQL nos permite facilitarnos la vida a todos los que trabajamos con este tipo de bases de datos, la implementación RegExp, o expresiones regulares.

Las expresiones regulares

Las expresiones regulares son algo que siempre se me ha atragantado, debe de ser por el concepto abstracto del que se componen o por que tampoco de dedicaba el tiempo que se merecian. Pero fue pasando el tiempo y poco a poco, por motivo laborales no hubo más remedio que plantarles cara, y apesar de ser algo que produce una curva de aprendizaje algo más elevada que usar botijo, el resultado es abrumador.

Si eres un usuario de Linux, medio-avanzado, serás un experto en ellas ya que grep (la herramienta por excelencia de Linux) junto las expresiones regulares son de lo más útil que te puedas imaginar.

En definitiva, llamamos expresión regular a un conjunto de caracteres que forman un patrón al que le aplicaremos una serie de elementos y comprobaremos si dicho patrón concuerda con alguno de los elementos aplicados.

En resumen, un sistema muy util para buscar coincidencias en varios elementos.

Expresiones Regulares y MySQL

Partiendo de la definición anterior, sacamos que se trata de buscar, y ¿que mejor para buscar que MySQL?

Cualquier motor de bases de datos que implemente SQL, usará una proporción descomunal de SELECT (consultas) frente a INSERT INTO (insercción de datos), por este motivo nacen las expresiones regulares para este lenguaje (SQL). Con ellas podemos definir patrones para perfeccionar las busquedas en nuestras bases de datos.

Veamos unos ejemplos:

Patrón básico

SELECT prod_name FROM products WHERE prod_name REGEXP '1000' ORDER BY prod_name;

Esta expresión REGEXP '1000', no filtrará todos los resultados de la tabla products en los que el campo prod_name contenga el valor 1000.

Como podemos ver esto es fácil, pero la cosa se puede complicar.

Patrón con punto

SELECT prod_name FROM products WHERE prod_name REGEXP '.000' ORDER BY prod_name;

En este ejemplo ya vemos como la expresión regular empieza a usar carácteres “raros”. Estos carácteres tienen un valor preestablecido para hacer las busquedas más genéricas, de modo que en este ejemplo obtendremos todas las filas de la tabla cuyo prod_name contenga algún valor como 1000, 2000, 3000,…pero tambien x000, d000,…
De aqui entonces podemos sacar que el (.) es el un carácter especial que indica que puede ser reemplazado por cualquier otro carácter. Pero tambien podemos necesitar que dichos carácteres se repitan un número definido o no de veces.

* 0 o más veces
+ 1 o más veces
? 0 o 1
{n} n veces
{n,} n o más veces
{n,m} Se especifica un rango entre n y m

Evidentemente estos carácteres tambien son carácteres válidos para nuestras busquedas y pueden formar parte de nuestros datos, por ese motivo hemos de escaparlos. Para ello usaremos la barra invertida doble.

	SELECT vend_name FROM vendors WHERE vend_name REGEXP '.' ORDER BY vend_name;

De esta forma obtendremos los resultados que contengan un punto en su campo vend_name. ¿Y como se escapa la barra invertida? Pues como si se tratara de otro carácter a escapar (\\\).

Patrón con inicio y fin

	SELECT prod_name FROM products WHERE prod_name REGEXP '^1000' ORDER BY prod_name; 

Otro carácter especial que debemos conocer es el de (^) que se encarga de indicar que el partrón se inicia al iniciar la línea, de esta forma obtendremos resultados como “1000 caballos ...” pero no “los 1000 caballos...“.

Pero no solo podemos controlar el inicio del texto, tambien tenemos operadores para depurar más nuestro patrón.

^ Inicio del texto
$ Fin del texto
[[:<:]] Inicio de la palabra
[[:>:]] Fin de la palabra

Patrón condicional

	SELECT prod_name FROM products WHERE prod_name REGEXP '1000|2000' ORDER BY prod_name;

La pipe (|) indica que el patrón puede estar formado por 1000 o por 2000, y nada más.

Patrón con varios carácteres condicionales

	SELECT prod_name FROM products WHERE prod_name REGEXP '[123] Ton' ORDER BY prod_name;

[123] nos indica que en la posición en la que se encuentra únicamente podrá haber un 1, un 2 o un 3, y ningún carácter más. Esto es muy util para controlar rangos de carácteres, por ejemplo solo números [0-9] o solo minúsculas [a-z].

Para mejorar el trabajo de los desarrolladores se crearon una serie de variables para definir algunos de estos patrones de forma cómoda y rápida.

[:alnum:] [a-zA-Z0-9]
[:alpha:] [a-zA-Z]
[:blank:] [\\t ]
[:cntrl:] Carácteres de control (ASCII 0 hasta 31 y 127)
[:digit:] [0-9]
[:graph:] [:print:] sin contar el espacio
[:lower:] [a-z]
[:print:] Carácteres imprimibles
[:punct:] Carácteres no comprendidos en [:alnum:] ni en [:cntrl:]
[:space:] [\\f\\n\\r\\t\\v ]
[:upper:] [A-Z]
[:xdigit:] [a-fA-F0-9]

Conclusión

Conociendo esto podemos definir un patrón lo más ajustado posible a nuestra busqueda, haciendo que nuestros resultados sean los que realmente queremos obtener. Un poco de paciencia y tiempo y cualquiera puede controlar esta tran propiedad de MySQL.

Categories: MySQL, PROGRAMACION Tags: