Necesito recortar New Line (Chr (13) y Chr (10) y espacio de tabulación desde el principio y el final de una cadena) en una consulta de Oracle. Aprendí que no hay una manera fácil de recortar múltiples caracteres en Oracle. La función "recorte" recorta solo un carácter. Sería una degradación del rendimiento si llamo a la función de recorte recursivamente en un bucle usando una función. Escuché que regexp_replace puede coincidir con los espacios en blanco y eliminarlos. ¿Puede guiar de manera confiable el uso de regexp_replace para recortar múltiples espacios de tabulación o nuevas líneas o combinaciones de ellos al principio y al final de una cadena? Si hay alguna otra forma, por favor guíame.Trim Whitespaces (Nueva línea y espacio de tabulación) en una cadena en Oracle
Respuesta
¿Qué tal la función de traducción rápida y sucia?
Esto eliminará todas las ocurrencias de cada carácter en cadena1:
SELECT translate(
translate(
translate(string1, CHR(10), '')
, CHR(13), '')
, CHR(09), '') as massaged
FROM BLAH;
REGEXP_REPLACE es una opción, pero puede ver un impacto en el rendimiento en función de la complejidad de su expresión es.
Esto está mal en dos niveles. En primer lugar, siempre que pase nulo (por ejemplo, '''') como el 3er parámetro a TRANSLATE, siempre devolverá null. En segundo lugar, TRANSLATE actúa en toda la cadena, no solo en el comienzo y el final de una cadena (como lo solicita OP). Consulte: http://docs.oracle.com/cd/E11882_01/server.112/e10592/functions216.htm#SQLRF06145 –
Jeffrey está muy en lo cierto al decir que esto está roto, a menos que reemplace '' con '' (espacio en blanco). Además, translate permite especificar múltiples caracteres para ser reemplazados a la vez. Esto hace lo mismo: selecciona recortar (translate ('example', chr (10) || chr (13) || chr (09), '')) como ejemplo de dual; Tenga en cuenta que todavía reemplaza estos caracteres, en todas partes, en la cadena. – Wouter
Hmm, los comentarios de stackoverflow reemplazan espacios consecutivos con solo uno. Debería haber tres espacios entre el '' en la instrucción SQL anterior. – Wouter
¿Para qué versión de Oracle? 10g + admite expresiones regulares: consulte t his thread on the OTN Discussion forum for how to use REGEXP_REPLACE para cambiar caracteres no imprimibles en ''
.
Puede usar tanto LTRIM como RTRIM.
select rtrim(ltrim('abcdab','ab'),'ab') from dual;
Si desea recortar CHR (13) sólo cuando se trata con un CHR (10) se vuelve más complicado. En primer lugar, tradujo la cadena combinada a un solo carácter. Luego LTRIM/RTRIM ese personaje, luego reemplace el carácter individual de nuevo a la cadena combinada.
select replace(rtrim(ltrim(replace('abccccabcccaab','ab','#'),'#'),'#'),'#','ab') from dual;
En los casos en que la solución de Oracle parece demasiado complicado, puedo crear una clase Java con métodos estáticos y luego instalarlo como un paquete de Oracle. Puede que esto no sea tan efectivo, pero eventualmente encontrará otros casos (por ejemplo, conversión de fecha a milisegundos) donde encontrará que la alternativa de java es útil.
Si tiene Oracle 10g, REGEXP_REPLACE es bastante flexible.
Usando la siguiente cadena como una prueba:
chr(9) || 'Q qwer' || chr(9) || chr(10) ||
chr(13) || 'qwerqwer qwerty' || chr(9) ||
chr(10) || chr(13)
El [[:space:]]
eliminará todos los espacios en blanco, y el ([[:cntrl:]])|(^\t)
de expresión regular eliminar los caracteres no imprimibles y las pestañas.
select
tester,
regexp_replace(tester, '(^[[:space:]]+)|([[:space:]]+$)',null)
regexp_tester_1,
regexp_replace(tester, '(^[[:cntrl:]^\t]+)|([[:cntrl:]^\t]+$)',null)
regexp_tester_2
from
(
select
chr(9) || 'Q qwer' || chr(9) || chr(10) ||
chr(13) || 'qwerqwer qwerty' || chr(9) ||
chr(10) || chr(13) tester
from
dual
)
de Regreso:
- REGEXP_TESTER_1: "
Qqwerqwerqwerqwerty
" - REGEXP_TESTER_2: "
Q qwerqwerqwer qwerty
"
Esperamos que este sea de alguna utilidad.
Upvoted para sugerencia de REGEXP_REPLACE y el ejemplo bellamente presentado (debe haber una bonificación especial para aquellos en SO). Pero no hace lo que pidió OP, que es solo eliminar al inicio * y * fin * de una cadena de varias líneas. Voy a tomarme la libertad de editar para ajustar la expresión regular en consecuencia. –
BTW al probar, es mucho más fácil ver lo que sucede si configuras el 3er parámetro en 'regexp_replace' en' '.'' en lugar de' null' –
Hola @Andrew: gracias por el voto popular. Sin embargo, tendré que deshacer los cambios ya que su nueva versión ahora significa que el ejemplo no produce el resultado indicado. El objetivo del ejemplo fue demostrar la amplitud del espacio en blanco que manejaban los parámetros '[[: espacio:]]' y '[[: ctrl:]]'. Tal vez desee actualizar la respuesta para incluir sus expresiones modificadas al final de la respuesta después de mi ejemplo simplificado. Además, no estoy de acuerdo con el uso de '.' en lugar de 'null' - el' null' deja en claro que no reemplazas nada. –
Esto cómo iba a ponerlo en práctica:
REGEXP_REPLACE(text,'(^[[:space:]]*|[[:space:]]*$)')
¡No estoy seguro de por qué esto no ha recibido más atención! Es la única respuesta correcta en la página. Y conciso también – cartbeforehorse
esta es la mejor respuesta – cagri
A continuación código se puede utilizar para quitar la nueva línea y el espacio en la columna de la tabla de texto
Select replace(replace(TEXT,char(10),''),char(13),'')
No funciona. Puede haber 'chr (13)' o 'chr (10)' en el medio de la cadena como se publicó originalmente en la pregunta. – cartbeforehorse
Pruebe el código de abajo. Funcionará si ingresa varias líneas en una sola columna.
create table products (prod_id number , prod_desc varchar2(50));
insert into products values(1,'test first
test second
test third');
select replace(replace(prod_desc,chr(10),' '),chr(13),' ') from products where prod_id=2;
de salida: Prueba segunda prueba primera prueba tercer
Sé que esto no es una respuesta estricta para esta pregunta, pero yo he estado trabajando en varios escenarios en los que necesita para transformar los datos de texto siguiendo estas reglas :
- No espacios o chars ctrl al comienzo de la strin g
- No hay espacios o CHARS ctrl al final de la cadena
- Múltiples ocurrencies de espacios o CHARS ctrl serán reemplazados a un solo espacio
código de abajo siguen las reglas detalladas anteriormente:
WITH test_view AS (
SELECT CHR(9) || 'Q qwer' || CHR(9) || CHR(10) ||
CHR(13) || ' qwerqwer qwerty ' || CHR(9) ||
CHR(10) || CHR(13) str
FROM DUAL
) SELECT
str original
,TRIM(REGEXP_REPLACE(str, '([[:space:]][[:space:]]+)|([[:cntrl:]]+)', ' ')) fixed
FROM test_view;
ORIGINAL FIXED
---------------------- ----------------------
Q qwer Q qwer qwerqwer qwerty
qwerqwer qwerty
1 row selected.
TRIM(BOTH chr(13)||chr(10)||' ' FROM str)
Es bueno dar algún código, pero debe venir con alguna explicación para señalar los cambios y por qué es la solución de la pregunta del OP. –
Si bien este fragmento de código puede resolver la pregunta, [incluyendo una explicación] (http://meta.stackexchange.com/questions/114762/explaining-entirely-code-based-answers) realmente ayuda a mejorar la calidad de su publicación. Recuerde que usted está respondiendo la pregunta a los lectores en el futuro, y es posible que esas personas no sepan los motivos de su sugerencia de código. –
No resuelve el problema. Causas 'ORA-30001' – cartbeforehorse
TRANSLATE (column_name, 'd'||CHR(10)||CHR(13), 'd')
La 'd' es un personaje ficticio, ya que traducir no funciona si el tercero parámetro es nulo.
- 1. ¿Cómo puedo incluir caracteres especiales (tabulación, nueva línea) en una cadena de resultados doctest de python?
- 2. Java divide una cadena por espacio, nueva línea, pestaña, puntuación
- 3. ¿Elimina php trim() los saltos de línea?
- 4. Agregar una nueva línea en una cadena en C#
- 5. ¿Por qué el navegador representa una nueva línea como espacio?
- 6. donde se encuentra una nueva línea en una cadena:
- 7. nueva línea en una cadena de varias líneas
- 8. ¿Cómo ingresar caracteres de línea nueva en Oracle?
- 9. Android: valor de cadena con nueva línea en XML
- 10. ¿Agregar una nueva línea en el archivo?
- 11. C#: Nuevos caracteres de línea y tabulación en cadenas
- 12. ¿Cómo agregar una nueva línea extra con 'puts' sin pegar el carácter de nueva línea en una cadena?
- 13. file_put_contents y una nueva línea de ayuda
- 14. recortar el espacio en blanco de una cadena?
- 15. Eliminación de retorno de carro y nueva línea del final de una cadena en C#
- 16. cadena de JavaScript carácter de nueva línea?
- 17. Leer cadena xml en cuadro de texto con nueva línea
- 18. Cómo escapar de una nueva línea de la cadena
- 19. ¿Constante de cadena para una nueva línea + pestaña?
- 20. Separar una cadena en la nueva línea, pestaña y cierto número de espacios
- 21. Cadena de tuberías con nueva línea al comando en bash?
- 22. Imprimir en la misma línea y no en una nueva línea en python
- 23. PHP cadena larga sin línea nueva
- 24. inserte una cadena multilínea en Oracle con sqlplus
- 25. php: etiquetas trim br desde el comienzo de una cadena?
- 26. Nueva línea y devuelve ignorado en setMessageBody
- 27. Nueva línea en Node.js
- 28. IE8 y de jQuery trim()
- 29. String.IsNullOrEmpty utilizando Trim()
- 30. android insertar nueva línea en una notificación
La función "recorte" no solo elimina un solo carácter. Elimina todos los espacios en blanco. –
Hola Seshan. ¿Alguna de las siguientes respuestas fue útil? –
Voy a verificar eso. Comprobará y le hará saber .. – Seshan