8 votos

Convirtiendo campos numéricos en cadenas con ceros delanteros

Estoy tratando de definir una acción en QGIS usando uno de mis campos, pero tengo algunos problemas con su formato.

Tengo una cadena numérica como '5' y necesito tener un formato como '005'. He intentado la función tostring("mifield") pero no soy capaz de definir el formato que quiero.

¿Hay alguna manera de hacer algo como tostring(myfield,"000")?

Lo que estoy buscando es una función como esta: http://office.microsoft.com/en-us/excel-help/text-HP005209313.aspx?CTT=5&origin=HP005204211

14voto

GreyCat Puntos 146

La solución es:

'000'   ||  tostring("myfield")

(una variable = 'variable') + (concatenación de cadenas = ||) + (campo = "myfield")

5 -> 0005
50 -> 00050
500 -> 000500

combinando variables

'hello'   || ', ' ||  tostring("myfield")

5 -> hello, 5

'hello'   || ', ' ||  tostring("myfield") || ', goodbye'

5 -> hello, 5, goodbye

combinando campos

tostring("myfield") || ', ' || tostring("otherfield")

combinando otras cosas, como geometría

Por ejemplo, para un punto, las coordenadas x e y -> (x, y)

'('   ||   $x  ||   ','   ||  $y  || ' )'

y puedes formatear el resultado

right(  ('000'   ||  tostring(  "myfield" )), 4)

5 -> 0005
50 -> 0050
500 -> 0500

etc.

1 votos

Muchas gracias. He probado tu última opción pero hubo un problema porque no hay una función "right" en QGIS 1.8. He utilizado las funciones "substr" y "length" de esta forma: substr( ( '000' || tostring ("myfield")) , ( length ( ( '000' || tostring("myfield")) ) -2) , 3 ) Luego obtuve '005'. Gracias de nuevo.

0 votos

Gran respuesta y gracias por publicar todos estos patrones de formato alternativos. Muy útiles. Gracias.

9voto

shergill Puntos 1133

Otra opción, posiblemente más compacta, utilizando lpad() (Left Pad) en las Funciones de Cadena que requiere tres argumentos: el campo, la longitud deseada y el carácter de relleno

lpad("MiCampo", 3, '0')

2voto

andyface Puntos 123

En QGIS 1.8 he usado este porque no había una función right():

substr(('000' || tostring("myfield")), (length(('000' || tostring("myfield")))-2), 3)

Y he obtenido 005

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X