intermedios - Recortar espacios al final con PostgreSQL
quitar espacios postgresql (3)
Tengo una columna eventDate
que contiene espacios finales. Estoy tratando de eliminarlos con la función PostgreSQL TRIM()
. Más específicamente, estoy corriendo:
SELECT TRIM(both '' '' from eventDate)
FROM EventDates;
Sin embargo, los espacios finales no desaparecen. Además, cuando intento recortar otro personaje de la fecha (como un número), tampoco recorta. Si estoy leyendo el manual correctamente, esto debería funcionar. ¿Alguna idea?
Debería funcionar de la manera en que lo está manejando, pero es difícil de decir sin conocer la cadena específica.
Si solo está recortando espacios iniciales, es posible que desee utilizar la forma más concisa:
SELECT RTRIM(eventDate)
FROM EventDates;
Esta es una pequeña prueba para mostrarte que funciona. ¡Dinos si funciona!
Si su espacio en blanco es más que solo el valor del space
meta, necesitará usar regexp_replace
:
SELECT ''('' || REGEXP_REPLACE(eventDate, E''[[:space:]]'', '''', ''g'') || '')''
FROM EventDates;
En el ejemplo anterior, estoy limitando el valor de retorno en (
y )
solo para que pueda ver fácilmente que la regex replace funciona en un indicador psql. Por lo tanto, querrás eliminar esos en tu código.
Hay muchos caracteres invisibles diferentes ("espacio en blanco"). El excelente artículo de Wikipedia sobre el espacio (puntuación) debería darte una idea.
La función SQL trim()
estándar por defecto solo recorta el carácter de espacio latino básico (Unicode: U + 0020 / ASCII 32). Lo mismo con las rtrim()
y ltrim()
. Su llamada también solo enumera ese carácter (redundantemente).
Use expresiones regulares con regexp_replace()
lugar.
Trailing
Para eliminar todo el espacio en blanco posterior (pero no el espacio en blanco dentro de la cadena):
SELECT regexp_replace(eventdate, ''/s+$'', '''') FROM eventdates;
La expresión regular explicada:
/s
.. clase de expresión regular taquigrafía para [[:space:]]
+
.. 1 o más partidos consecutivos
$
... fin de la cadena
Manifestación:
SELECT regexp_replace(''inner white '', ''/s+$'', '''') || ''|''
Devoluciones:
inner white|
Sí, eso es una sola barra invertida ( /
). Detalles en esta respuesta relacionada.
Líder
Para eliminar todo el espacio en blanco inicial (pero no el espacio en blanco dentro de la cadena):
SELECT regexp_replace(eventdate, ''^/s+'', '''') FROM eventdates;
^
.. inicio de cadena
Ambos
Para eliminar ambos , puede encadenar llamadas de funciones anteriores:
SELECT regexp_replace(regexp_replace(eventdate, ''^/s+'', ''''), ''/s+$'', '''') FROM eventdates;
O puede reducir eso a una sola llamada con dos ramas .
Agregue ''g''
como cuarto parámetro para reemplazar todas las coincidencias, no solo la primera:
SELECT regexp_replace(eventdate, ''^/s+|/s+$'', '''', ''g'') from eventdates;
Pero eso normalmente debería ser más rápido con substring()
:
SELECT substring(eventdate, ''/S(?:.*/S)*'')) FROM eventdates;
/S
.. todo menos espacio en blanco
(?:
re
)
Conjunto de patrentheses que no capturan .*
.. cualquier cadena de caracteres 0-n
Efectivamente toma el primer carácter que no sea de espacio en blanco y todo hasta el último carácter que no sea de espacio en blanco, si está disponible.