Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Firebird e Interbase (https://www.clubdelphi.com/foros/forumdisplay.php?f=19)
-   -   capitalizar palabras en firebird (https://www.clubdelphi.com/foros/showthread.php?t=91494)

silverblade 19-02-2017 00:08:40

capitalizar palabras en firebird
 
Hola amigos, necesito que me ayuden con un problemita que tengo. Lo que quiero hacer es poner la primera letra de cada frase de una cadena.

Ejemplo:

tengo un campo nombre completo en mi base de datos donde guardo el nombre de la persona.

Guardo los datos de esta forma: MARIA FERNANDEZ CUELLO.
Y quiero convertir la cadena de esta forma: Maria Fernandez Cuello.

Alguien puede ayudar, por favor?

AgustinOrtu 19-02-2017 02:00:23

Lo querés implementar en Delphi?

Básicamente lo que querés hacer es pasar el string a minúscula. Después lo separas por un delimitador (en tú caso un espacio en blanco). Esto te genera un array of string, el cual tiene en cada posición cada "parte" del nombre. El último paso es recorrer el arreglo y convertir a mayúsculas el primer carácter de cada uno de los string. Luego lo grabas en la base

Te van a interesar estas funciones SplitString
UpCase y LowerCase

ecfisa 19-02-2017 05:52:03

Hola.

Por lo que entiendo tenes los datos almacenados en mayúsculas y para modificarlos como deseas, podes hacer:
Código SQL [-]
UPDATE TABLA
SET NOMBRE = LEFT( UPPER(NOMBRE), 1 )  ||  RIGHT( LOWER(NOMBRE), CHAR_LENGTH(NOMBRE)-1 )

Saludos :)

AgustinOrtu 19-02-2017 07:14:04

Cita:

Empezado por ecfisa (Mensaje 513468)

Código SQL [-]
UPDATE TABLA
SET NOMBRE = LEFT( UPPER(NOMBRE), 1 )  ||  RIGHT( LOWER(NOMBRE), CHAR_LENGTH(NOMBRE)-1 )


Pero en ese caso, no transformaria

Código:

MARIA FERNANDEZ CUELLO --> Maria fernandez cuello

Casimiro Notevi 19-02-2017 10:21:23

¿Y para qué quiere hacer eso? luego es un fastidio para hacer búsquedas :confused:

Al González 19-02-2017 16:42:27

Cita:

Empezado por Casimiro Notevi (Mensaje 513471)
¿Y para qué quiere hacer eso? luego es un fastidio para hacer búsquedas :confused:

Quizá porque el verdadero nombre de esa persona no es MARIA FERNANDEZ CUELLO, sino María Fernández Cuello (haría falta recuperar los acentos también).

Ya tengo algún tiempo que no hago una búsqueda de esas en el SQL de Firebird, pero creo recordar que se pueden evitar los problemas de altas y bajas y de acentos eligiendo un juego de caracteres y un ordenamiento adecuados. Los que trabajan en el día a día con Firebird podrían confirmar o corregir esto.

Un abrazo en búsqueda. :p

Al González.

AgustinOrtu 19-02-2017 18:26:25

Cita:

Empezado por Al González (Mensaje 513472)
Ya tengo algún tiempo que no hago una búsqueda de esas en el SQL de Firebird, pero creo recordar que se pueden evitar los problemas de altas y bajas y de acentos eligiendo un juego de caracteres y un ordenamiento adecuados

Entendiendo Collate
Consultando sin importar mayúsculas ni acentos

Al González 19-02-2017 18:41:31

Cita:

Empezado por AgustinOrtu (Mensaje 513473)

¡Ándale! Eso, eso, eso... ;) ^\||/

Casimiro Notevi 19-02-2017 19:19:37

Cita:

Empezado por Al González (Mensaje 513472)
Quizá porque el verdadero nombre de esa persona no es MARIA FERNANDEZ CUELLO, sino María Fernández Cuello (haría falta recuperar los acentos también).
Ya tengo algún tiempo que no hago una búsqueda de esas en el SQL de Firebird, pero creo recordar que se pueden evitar los problemas de altas y bajas y de acentos eligiendo un juego de caracteres y un ordenamiento adecuados. Los que trabajan en el día a día con Firebird podrían confirmar o corregir esto.
Un abrazo en búsqueda. :p
Al González.

Lo uso así:
Código SQL [-]
nombre varchar(128) character set UTF8 collate ES_ES_CI_AI

ecfisa 20-02-2017 04:29:47

Hola Agustín.
Cita:

Empezado por AgustinOrtu (Mensaje 513469)
Pero en ese caso, no transformaria

Código:

MARIA FERNANDEZ CUELLO --> Maria fernandez cuello

Tenés toda la razón, se me escapó la tortuga :o

Desde Firebird, tendría que hacer un procedimiento almacenado:
Código SQL [-]
SET TERM ^ ;

CREATE OR ALTER PROCEDURE PR_FIRST_CAP_CHAR  (
    NOMBRE VARCHAR(255))
RETURNS (
    RESULT VARCHAR(255))
AS
DECLARE VARIABLE I INTEGER;
BEGIN
  RESULT = '';
  I      = 1;
  WHILE ( I <= CHAR_LENGTH( NOMBRE ) ) DO
  BEGIN
    IF ( I = 1 ) THEN
      RESULT = RESULT || UPPER( SUBSTRING ( NOMBRE FROM I FOR 1 ) );
    ELSE IF ( SUBSTRING ( NOMBRE FROM I-1 FOR 1 ) = ' ') THEN
      RESULT = RESULT || UPPER( SUBSTRING ( NOMBRE FROM I FOR 1 ) );
    ELSE
      RESULT = RESULT || LOWER( SUBSTRING ( NOMBRE FROM I FOR 1 ) );
    I = I + 1;
  END
  SUSPEND;
END^

SET TERM ; ^

Llamadas ejemplo:
Código SQL [-]
SELECT RESULT FROM PR_FIRST_CAP_CHAR ( 'maRia dE los aNgeLes jUArez' )
Código SQL [-]
UPDATE TABLA SET NOMBRE = ( SELECT RESULT FROM PR_FIRST_CAP_CHAR( NOMBRE ) )

Saludos :)

silverblade 20-02-2017 23:06:30

Gracias Amigos amigos ya pude resolverlo, gracias por su ayuda!!!!


La franja horaria es GMT +2. Ahora son las 00:56:21.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi