unicas - tipos de restricciones en mysql




¿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? (4)

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.

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'?


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.


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.





tsql