values not multiple sql sql-server

not - sql server 2017 download



¿Cómo puedo eliminar las citas iniciales y finales en SQL Server? (13)

Tengo una tabla en una base de datos de SQL Server con una columna NTEXT. Esta columna puede contener datos que están entre comillas dobles. Cuando solicito esta columna, quiero eliminar estas citas iniciales y finales.

Por ejemplo:

"Este es un mensaje de prueba"

debe convertirse

Este es un mensaje de prueba

Sé de las funciones LTRIM y RTRIM, pero funcionan solo para espacios. Cualquier sugerencia sobre qué funciones puedo usar para lograr esto.


Acabo de probar este código en MS SQL 2008 y lo he validado.

Eliminar la cita más a la izquierda:

UPDATE MyTable SET FieldName = SUBSTRING(FieldName, 2, LEN(FieldName)) WHERE LEFT(FieldName, 1) = ''"''

Eliminar la comilla más a la derecha: (Revisado para evitar errores de conversión de tipo implícita a int)

UPDATE MyTable SET FieldName = SUBSTRING(FieldName, 1, LEN(FieldName)-1) WHERE RIGHT(FieldName, 1) = ''"''


Algunos UDFs para reutilización.

Recorte a la izquierda por carácter (cualquier número)

CREATE FUNCTION [dbo].[LTRIMCHAR] (@Input NVARCHAR(max), @TrimChar CHAR(1) = '','') RETURNS NVARCHAR(max) AS BEGIN RETURN REPLACE(REPLACE(LTRIM(REPLACE(REPLACE(@Input,'' '',''¦''), @TrimChar, '' '')), '' '', @TrimChar),''¦'','' '') END

Recorte correcto por carácter (cualquier número)

CREATE FUNCTION [dbo].[RTRIMCHAR] (@Input NVARCHAR(max), @TrimChar CHAR(1) = '','') RETURNS NVARCHAR(max) AS BEGIN RETURN REPLACE(REPLACE(RTRIM(REPLACE(REPLACE(@Input,'' '',''¦''), @TrimChar, '' '')), '' '', @TrimChar),''¦'','' '') END

Tenga en cuenta que el carácter ficticio ''¦'' (Alt + 0166) no puede estar presente en los datos (es posible que desee probar su cadena de entrada, primero, si no está seguro o utilice un carácter diferente).


La siguiente secuencia de comandos elimina las comillas solo alrededor del valor de la columna si la tabla se llama [Mensajes] y la columna se llama [Descripción].

-- If the content is in the form of "anything" (LIKE ''"%"'') -- Then take the whole text without the first and last characters -- (from the 2nd character and the LEN([Description]) - 2th character) UPDATE [Messages] SET [Description] = SUBSTRING([Description], 2, LEN([Description]) - 2) WHERE [Description] LIKE ''"%"''


Mi solución es usar la diferencia en la longitud de los valores de columna comparada con la misma longitud de columna, pero con las comillas dobles reemplazadas por espacios y recortadas para calcular los valores de inicio y longitud como parámetros en una función SUBSTRING.

La ventaja de hacerlo de esta manera es que puede eliminar cualquier carácter inicial o final, incluso si aparece varias veces mientras deja cualquier carácter contenido en el texto.

Aquí está mi respuesta con algunos datos de prueba:

SELECT x AS before ,SUBSTRING(x ,LEN(x) - (LEN(LTRIM(REPLACE(x, ''"'', '' '')) + ''|'') - 1) + 1 --start_pos ,LEN(LTRIM(REPLACE(x, ''"'', '' ''))) --length ) AS after FROM ( SELECT ''test'' AS x UNION ALL SELECT ''"'' AS x UNION ALL SELECT ''"test'' AS x UNION ALL SELECT ''test"'' AS x UNION ALL SELECT ''"test"'' AS x UNION ALL SELECT ''""test'' AS x UNION ALL SELECT ''test""'' AS x UNION ALL SELECT ''""test""'' AS x UNION ALL SELECT ''"te"st"'' AS x UNION ALL SELECT ''te"st'' AS x ) a

Lo que produce los siguientes resultados:

before after ----------------- test test " "test test test" test "test" test ""test test test"" test ""test"" test "te"st" te"st te"st te"st

Una cosa a tener en cuenta es que cuando obtengo la longitud solo necesito usar LTRIM y no LTRIM y RTRIM combinados, esto se debe a que la función LEN no cuenta los espacios finales.


Para eliminar ambas citas puedes hacer esto

SUBSTRING(fieldName, 2, lEN(fieldName) - 2)

puede asignar o proyectar el valor resultante


Pensé que este es un script más simple si quieres eliminar todas las citas

UPDATE Table_Name SET col_name = REPLACE(col_name, ''"'', '''')


Puedes probar esto-

SELECT left(right(cast(SampleText as nVarchar),LEN(cast(sampleText as nVarchar))-1),LEN(cast(sampleText as nVarchar))-2) FROM TableName

aclamaciones


Puedes usar la siguiente consulta que me funcionó

Para actualizar

UPDATE table SET colName= REPLACE(LTRIM(RTRIM(REPLACE(colName, ''"'', ''''))), '''', ''"'') WHERE...

Para seleccionar-

SELECT REPLACE(LTRIM(RTRIM(REPLACE(colName, ''"'', ''''))), '''', ''"'') FROM TableName


Sé que esta es una publicación de una pregunta más antigua, pero mi hija vino a mí con la pregunta y mencionó que esta página tiene posibles respuestas. Dado que está buscando una respuesta para esto, es un supuesto seguro que otros podrían serlo también.

Todos son excelentes enfoques y, como todo, hay tantas formas de pelar a un gato como gatos a la piel.

Si buscas un recorte a la izquierda y un recorte a la derecha de un personaje o una cadena, y tu personaje / cadena final tiene una longitud uniforme, esta es mi sugerencia:

SELECT SUBSTRING(ColName,VAR, LEN(ColName)-VAR)

O en esta pregunta ...

SELECT SUBSTRING(''"this is a test message"'',2, LEN(''"this is a test message"'')-2)

Con esto, simplemente ajuste el punto de inicio SUBSTRING (2) y la posición LEN (-2) al valor que necesite eliminar de su cadena.

Es no iterativo y no requiere pruebas explícitas de casos y, sobre todo, está en línea, todo lo cual contribuye a un plan de ejecución más limpio.


Simplemente puede usar la función "Reemplazar" en SQL Server.

Me gusta esto ::

select REPLACE(''this is a test message'',''"'','''')

nota: el segundo parámetro aquí es "comillas dobles" dentro de dos comillas simples y el tercer parámetro es simplemente una combinación de dos comillas simples. La idea aquí es reemplazar las comillas dobles con un espacio en blanco.

Muy simple y fácil de ejecutar!


Yo uso esto:

UPDATE DataImport SET PRIO = CASE WHEN LEN(PRIO) < 2 THEN (CASE PRIO WHEN ''""'' THEN '''' ELSE PRIO END) ELSE REPLACE(PRIO, ''"'' + SUBSTRING(PRIO, 2, LEN(PRIO) - 2) + ''"'', SUBSTRING(PRIO, 2, LEN(PRIO) - 2)) END


usted podría reemplazar las comillas con una cadena vacía ...

SELECT AllRemoved = REPLACE(CAST(MyColumn AS varchar(max)), ''"'', ''''), LeadingAndTrailingRemoved = CASE WHEN MyTest like ''"%"'' THEN SUBSTRING(Mytest, 2, LEN(CAST(MyTest AS nvarchar(max)))-2) ELSE MyTest END FROM MyTable