sistematica los leer introduccion hacer filogenia filogeneticos filogenetico filogenetica ejercicios como cladograma arboles arbol animales animal sql postgresql types sql-order-by natural-sort

sql - los - introduccion a la filogenia



PostgreSQL ORDER BY tema-clasificación natural (4)

La razón es que la cadena se ordena alfabéticamente (en lugar de numéricamente como la quieres) y 1 ordena antes de 9. Puedes resolverlo así:

SELECT * FROM employees ORDER BY substring(em_code, 3)::int DESC

Sería más eficiente eliminar el ''EM'' redundante de tu em_code , si puedes, y guardar un número entero para empezar.

Respuesta adicional a la pregunta en el comentario

Para quitar cualquiera y todos los no dígitos de una cadena:

SELECT regexp_replace(em_code, E''//D'','''',''g'') FROM employees

/D es la expresión regular clase-taquigrafía para "sin dígitos".
''g'' como 4 ° parámetro es el interruptor "global" para aplicar el reemplazo a cada aparición en la cadena, no solo a la primera.

Así que reemplazo cada no dígito con la cadena vacía destilando únicamente dígitos de la cadena.

Tengo un problema de ORDER BY Postgres con la siguiente tabla:

em_code name EM001 AAA EM999 BBB EM1000 CCC

Para insertar un nuevo registro en la tabla,

  1. Selecciono el último registro con SELECT * FROM employees ORDER BY em_code DESC
  2. Franja de alfabetos de em_code usiging reg exp y store en ec_alpha
  3. Emitir la parte restante a entero ec_num
  4. Incrementar en un ec_num++
  5. Pad con suficientes zeors y prefijo ec_alpha otra vez

Cuando em_code alcanza EM1000, el algoritmo anterior falla.

El primer paso devolverá EM999 en lugar de EM1000 y nuevamente generará EM1000 como nuevo em_code , rompiendo la restricción de clave única.

¿Alguna idea de cómo seleccionar EM1000?


puede usar solo esta línea "ORDEN POR longitud (subcadena (em_code FROM ''[0-9] +'')), em_code"


Esto siempre surge en preguntas y en mi propio desarrollo, y finalmente me cansé de formas complicadas de hacer esto. Finalmente me rompí y lo implementé como una extensión de PostgreSQL:

https://github.com/Bjond/pg_natural_sort_order

Es gratis, licencia de MIT.

Básicamente solo normaliza los valores numéricos (cero valores numéricos pendientes) dentro de las cadenas, de modo que puede crear una columna de índice para la clasificación a alta velocidad au naturel. El léame explica.

La ventaja es que puede hacer que un disparador haga el trabajo y no el código de su aplicación. Se calculará a velocidad de máquina en el servidor de PostgreSQL y las migraciones de columnas de adición se vuelven simples y rápidas.