Estoy generando sentencias T-SQL SELECT para tablas para las cuales no tengo información de tipo de datos por adelantado. En estas declaraciones, necesito realizar operaciones de manipulación de cadenas que dependen de la longitud del valor original de las columnas de las tablas.T-SQL: ¿Cómo obtener la longitud exacta de una cadena en caracteres?
Un ejemplo (pero no el único) es insertar un texto en una posición específica en una cadena, incluyendo la opción para insertarlo en el extremo:
SELECT
CASE WHEN (LEN ([t0].[Product] = 8)
THEN [t0].[Product] + 'test'
ELSE STUFF ([t0].[Product], 8, 0, 'test')
END
FROM [OrderItem] [t0]
(el caso cuando + LEN es requerido porque STUFF no me permite insertar texto al final de una cadena.)
El problema es que LEN excluye los espacios en blanco finales, lo que arruinará el cálculo. Sé que puedo usar DATALENGTH, que no excluye los espacios en blanco finales, pero no puedo convertir los bytes devueltos por DATALENGTH a los caracteres requeridos por STUFF porque no sé si la columna Product es de tipo varchar o nvarchar.
Entonces, ¿cómo puedo generar una declaración SQL que depende de la longitud exacta de una cadena en caracteres sin información inicial sobre el tipo de datos de cadena que se utiliza?
+1 para una solución que funciona! –
+1 Eso podría ser un truco útil. –