Consultas sql en un campo

Estoy comenzando a manipular consultas en sql utilizando query analizer y quisiera saber como obtener solo el resultado = 8900.00 desde un campo que posee este registro 12583427}0161091558}10540101693}8900.00

1 respuesta

Respuesta
1
Hay muchas funciones para manipular cadenas de caracteres que son muy útiles en SQL Server, te presento a 3:
PATINDEX - Busca la primer ocurrencia de un conjunto de caracteres en una cadena. En nuestro caso es la } lo que buscaremos.
SUBSTRING - Devuelve una parte de una cadena en función de lo que se expresa en sus parámetros.
REVERSE - Da la vuelta a una cadena de caracteres.
Esta es tu solución:
SELECT REVERSE(SUBSTRING(REVERSE('12583427}0161091558}10540101693}8900.00'), 1, PATINDEX('%}%', REVERSE('12583427}0161091558}10540101693}8900.00'))-1))
SUBSTRING devuelve la parte de la cadena de caracteres que se expresa en el primer parámetro comenzando a partir de la posición que se especifica en el segundo parámetro, y terminando en la que se especifica en el segundo parámetro.
Con PATINDEX buscamos la primera ocurrencia del carácter }, como en este caso necesitamos lo que hay después de la última ocurrencia, lo que hacemos es darle la vuelta a la cadena con la función REVERSE, a esta posición le restamos uno para que la } no salga en nuestro resultado.
Y por supuesto, a SUBSTRING le especificamos que la cadena en la que vamos a buscar es la original al revés, porque si no nos cogería los caracteres del principio y queremos los del final.
Para que nuestro resultado sea el que queremos hacemos un REVERSE al resultado del SUBSTRING.
Muchas gracias por la respuesta, me funciono muy bien, en el caso de que yo tenga una base de datos cargada de registros de este tipo 12583427}0161091558}10540101693}8900.00 y solo desee lo ultimo que esta después del } porque necesito sumar todos esos montos, que consulta debería ejecutar. Existe algún ejemplo donde no tenga que escribir cada registro.?
No sé como se llama tu campo, te voy a poner un ejemplo suponiendo que tu campo se llama Importes, y tu tabla TablaImportes.
En el replace puedes utilizar campos directamente.
Sería del siguiente modo:
SELECT SUM(CAST(REVERSE(SUBSTRING(REVERSE(Importes), 1, PATINDEX('%}%', REVERSE(Importes))-1)) AS DECIMAL(18,2))) FROM TablaImportes
Me cuentas como te fue.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas