transponer registros español desde consultas columnas cero auto_increment aprender 11g sql oracle select sql-order-by case-sensitive

sql - registros - pivot oracle



¿Cómo puedo ordenar por una columna de la tabla en diferentes casos(Oracle) (5)

Otra opción es el uso de la función NLSSORT para realizar la clasificación lingüística :

SQL> with test as (select ''ANNIE'' as col from dual 2 union all select ''BOB'' from dual 3 union all select ''Daniel'' from dual 4 union all select ''annie'' from dual 5 union all select ''bob'' from dual 6 union all select ''Ångström'' from dual 7 union all select ''ångström'' from dual) 8 select col 9 from test 10 order by nlssort(col, ''NLS_SORT = WEST_EUROPEAN'') 11 / COL ---------- Ångström ångström ANNIE annie BOB bob Daniel

Las ventajas son más flexibilidad. Uno puede ordenar los caracteres con acentos, así como diferentes casos juntos. Se puede elegir tratar algunos caracteres de una manera específica del idioma especificando valores diferentes para NLS_SORT . Define un orden dentro del conjunto de caracteres equivalentes. Así que ''A'' y ''a'' están ordenados juntos, pero dentro de las ''a'', la mayúscula es lo primero. Desventajas Espero que NLSSORT use más CPU que LOWER, aunque no lo he marcado. Y NLSSORT solo usará un prefijo de NLSSORT :

La cadena devuelta, también conocida como clave de intercalación, es del tipo de datos RAW. La longitud de la clave de colación resultante de un valor de char dado para una colación dada puede exceder los 2000 bytes, que es la longitud máxima del valor RAW devuelto por NLSSORT. En este caso, NLSSORT calcula la clave de intercalación para un prefijo máximo, o subcadena inicial, de caracteres para que el resultado calculado no exceda los 2000 bytes. Para las colaciones monolingües, por ejemplo, FRANCÉS, la longitud del prefijo es típicamente de 1000 caracteres. Para las intercalaciones multilingües, por ejemplo GENERIC_M, el prefijo suele ser de 500 caracteres. La longitud exacta puede ser mayor o menor según la intercalación y los caracteres contenidos en caracteres.

¿Cómo puedo ordenar una tabla con una columna de varchar2 con caracteres en diferentes casos ( SUPERIOR e inferior )?

Por ejemplo, cuando hago un pedido de la columna Nombre, obtengo los siguientes resultados:

ANNIE BOB Daniel annie bob

Lo que quiero es algo como esto:

ANNIE annie BOB bob Daniel


Puedes usar INITCAP por ejemplo

SELECT fld FROM tbl ORDER BY INITCAP(fld) ASC;


Puedes usar la Orden por cluse para esto

select col_name from table_name order by col_name ;


Si está en versiones relativamente recientes de Oracle, debería mirar la configuración de NLS_SORT / NLS_COMP, en lugar de usar la función LOWER ().

Si no desea afectar globalmente a la instancia, puede usar la función NLSSORT () para configurar NLS_SORT para el alcance de una consulta específica.

SQL> create table case_insensitive(a varchar2(10)); Table created. SQL> insert into case_insensitive values(''D''); 1 row created. SQL> SQL> SQL> c/''D/''c 1* insert into case_insensitive values(''c'') SQL> / 1 row created. SQL> c/''c/''B 1* insert into case_insensitive values(''B'') SQL> / 1 row created. SQL> c/''B/''a 1* insert into case_insensitive values(''a'') SQL> / 1 row created. SQL> commit; Commit complete. SQL> select * from case_insensitive; A ---------- D c B a SQL> select * from case_insensitive order by a; A ---------- B D a c SQL> select * from case_insensitive order by nlssort(a,''NLS_SORT=BINARY_CI''); A ---------- a B c D

Un buen ejemplo de esto se puede encontrar here.


Use lower(field) , por ejemplo

select * from tbl order by lower(name)

Si necesita incluir caracteres especiales para idiomas distintos del inglés, entonces las otras respuestas sobre NLSSORT pueden ser lo que necesita. Si no lo hiciera, intentaría KISS y utilizar lower() ya que es muy fácil de recordar y de usar, y otros lo pueden leer (capacidad de mantenimiento).