unicas una tipos tipo tener separar restricción restricciones restriccion que puede por nombres llaves ejemplos delimitada datos constraint comas check cadena sql sql-server tsql

una - separar cadena delimitada por comas en sql server



¿Cuál es la forma más fácil de utilizar T-SQL/MS-SQL para agregar una cadena a las celdas de tabla existentes? (6)

Tengo una tabla con una columna de ''nombre de archivo''. Recientemente realicé una inserción en esta columna, pero en mi prisa olvidé agregar la extensión de archivo a todos los nombres de archivo ingresados. Afortunadamente, todas son imágenes ''.jpg''.

¿Cómo puedo actualizar fácilmente la columna ''nombre de archivo'' de estos campos insertados (suponiendo que pueda seleccionar las filas recientes según los valores de identificación conocidos) para incluir la extensión ''.jpg''?


La solucion es:

UPDATE tablename SET [filename] = RTRIM([filename]) + ''.jpg'' WHERE id > 50

Se requiere RTRIM porque de lo contrario la columna [filename] en su totalidad se seleccionará para la concatenación de cadenas; es decir, si se trata de una columna varchar (20) y el nombre de archivo tiene solo 10 letras, entonces seleccionará esas 10 letras y luego 10 espacios. Esto, a su vez, dará como resultado un error a medida que intente incluir 20 + 3 caracteres en un campo de 20 caracteres de longitud.


Si los datos originales provinieron de una columna o variable char (antes de insertarse en esta tabla), los datos originales tenían los espacios adjuntos antes de convertirse en varchar.

DECLARE @Name char(10), @Name2 varchar(10) SELECT @Name = ''Bob'', @Name2 = ''Bob'' SELECT CASE WHEN @Name2 = @Name THEN 1 ELSE 0 END as Equal, CASE WHEN @Name2 like @Name THEN 1 ELSE 0 END as Similiar

Lección de vida: nunca use char.


Quería ajustar la "Lección de vida" de David B. Creo que debería ser "nunca usar char para valores de cadena de longitud variable" -> Hay usos válidos para el tipo de datos de char, simplemente no tantos como algunas personas piensan :)


La respuesta al misterio de los espacios finales se puede encontrar en ANSI_PADDING

Para obtener más información, visite: SET ANSI_PADDING (Transact-SQL)

El valor predeterminado es ANSI_PADDIN ON. Esto afectará a la columna solo cuando se crea pero no a las columnas existentes.

Antes de ejecutar la consulta de actualización, verifique sus datos. Podría haber sido comprometido.

Ejecute la siguiente consulta para encontrar filas comprometidas:

SELECT * FROM tablename WHERE LEN(RTRIM([filename])) > 46 -- The column size varchar(50) minus 4 chars -- for the needed file extension ''.jpg'' is 46.

Estas filas han perdido algunos caracteres o no hay espacio suficiente para agregar la extensión de archivo.


Bien fácil, creo.

update MyTable set filename = filename + ''.jpg'' where ...

Editar: Ooh +1 a la respuesta de @ MattMitchell para la sugerencia rtrim.


La respuesta de MattMitchell es correcta si la columna es un CHAR (20), pero no es verdadera si fue un VARCHAR (20) y los espacios no se ingresaron explícitamente.

Si lo prueba en un campo CHAR sin la función RTRIM obtendrá un error "String o binary data truncado" .