PostgreSQL - Añadir ceros delante de un campo integer

   
Vista:

Añadir ceros delante de un campo integer

Publicado por zendi (98 intervenciones) el 20/10/2014 02:52:20
Que tal a todos, tengo esta tabla:

mi idea es que el campo, nrohistoria (integer)

quede formateado de esta forma ejemplo: 0001

actualmente esta guardando solamente el nro 1

ya lo he modificado con el tipode dato: numeric, pero sigue guardando solamente el nro 1.

Si alguien pudiera darme una idea ya que lo he cambiado, o tal vez haya otro tipo de dato.
Nota : ya estoy creando el codigo que crea este formato, pero la tabla no lo acepta, sino solo un numero.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
nrohistoria integer NOT NULL,
  nombre text NOT NULL,
  direccion text,
  telefono numeric,
  fecha_nac date NOT NULL,
  id_paciente serial NOT NULL,
  cod_sanguineo integer NOT NULL,
  cod_sexo integer,
  CONSTRAINT paciente_pkey PRIMARY KEY (id_paciente),
  CONSTRAINT paciente_cod_sanguineo_fkey FOREIGN KEY (cod_sanguineo)
      REFERENCES gsanguineo (codigo) MATCH SIMPLE
      ON UPDATE CASCADE ON DELETE RESTRICT,
  CONSTRAINT paciente_cod_sexo_fkey FOREIGN KEY (cod_sexo)
      REFERENCES sexo (codigo) MATCH SIMPLE
      ON UPDATE NO ACTION ON DELETE NO ACTION
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

Añadir ceros delante de un campo integer

Publicado por martin (48 intervenciones) el 20/10/2014 14:36:45
y si... , lo que vos queres es hacer una "etiqueta formateada", una opción es la de crear una view para cuando consultes esa tabla y crear en ejecución un campo donde muestre ese mismo id pero con los ceros adelante y claro esa es una expresion de cadena, ya que los ceros a la izquierda en lo que a numeros se refiere se desprecian.

en la view pone SELECT nrohistoria,right('0000'||cast(nrohistoria as text),4) AS nrohistoria_etiqueta FROM ....etc


Acordate de tomar con el right tantos caracteres como digitos va a tener el tipo de dato y poner tantos cero como digitos,yo puse 4,con lo cual despues del 9999 te va a truncar el numero.

La otra opción es cagregar un campo de texto donde insertas el valor formateado y ya te queda en la tabla.
Yo te recomiendo la view.

Saludos.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Añadir ceros delante de un campo integer

Publicado por zendi (98 intervenciones) el 21/10/2014 02:12:46
Hola martin. Pero seria mejor quitar el nrohistoria integer y colocar el nrohistoria text formateado por supuesto.

porque la idea es utilizarlo para cuando vaya a consultar un nro de historia, es lo que estaba analizando.
y disculpa la insistencia.

1
2
3
4
5
6
7
8
nrohistoria integer NOT NULL,
nombre text NOT NULL,
direccion text,
telefono numeric,
fecha_nac date NOT NULL,
id_paciente serial NOT NULL,
cod_sanguineo integer NOT NULL,
cod_sexo integer,

Saludos.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Añadir ceros delante de un campo integer

Publicado por martin (48 intervenciones) el 21/10/2014 15:16:01
Eso lo definis vos, pero no es necesario, por que la busqueda la podes hacer sobre una view que genera ese dato al vuelo, no se como generas el nrodehistoria pero si tomas el ultimo y le sumas uno vas a a tener que agregarle a eso conversiones por que va a ser tipo TEXT o varchar etc.
Con el numerico simplemente haces el calculo y despues la view genera al vuelo el numero con el formaTO QUE QUERES.

Saludos.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Añadir ceros delante de un campo integer

Publicado por zendi (98 intervenciones) el 21/10/2014 22:56:25
Bueno estoy aplicando la view que me dijiste:

1
SELECT nrohistoria, right('0000'||cast(nrohistoria as text),4) AS nrohistoria_etiqueta FROM paciente


pero me arroja este error:
1
2
3
4
ERROR: function right(text, integer) does not exist
SQL state: 42883
Hint: No function matches the given name and argument types. You may need to add explicit type casts.
Character: 20
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Añadir ceros delante de un campo integer

Publicado por martin (48 intervenciones) el 22/10/2014 02:06:16
RIGHT es una funcion de cadena standar http://www.postgresql.org/docs/9.1/static/functions-string.html, recien probe y anda perfecto, que version de postgresql estas usando?

proba:

SELECT nrohistoria, right('0000'::text||cast(nrohistoria::bigint as text),4) AS nrohistoria_etiqueta FROM paciente;

nrohistoria de que tipo es?

por otro lado me parece que la function right aparece en las 9.x

Proba

SELECT nrohistoria, lpad(CAST(nrohistoria AS TEXT), 4, '0') AS nrohistoria_etiqueta FROM paciente;

nrohistoria de que tipo es?
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Añadir ceros delante de un campo integer

Publicado por zendi (98 intervenciones) el 22/10/2014 04:36:42
tengo la Version 1.6.3

y la :
1
PostgreSQL 8.2.3 Documentation
creo que estoy atrasado jeje
con razon no funciona.

y nrohistoria es de tipo integer

ademas de eso tampoco se como determinar cual version es, ya que esta la 1.6.3 y la 8.2.3

y te informo que la segunda view:
1
SELECT nrohistoria, lpad(CAST(nrohistoria AS TEXT), 4, '0') AS nrohistoria_etiqueta FROM paciente;


si funciona, si formatea el nrohistoria.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar