Dividir una cadena de caracteres en Trigger's de mssql

Antes que nada agradezco tu ayuda al orientarme a triggers de mssql ya que ahora realizo muchas más cosas con este sistema, tengo una nueva duda la cual googleando no me ha aparecido, yo voy a realizar un trigger para tabla1 donde tengo lo siguiente:
Nombre
Password
Cadena
_____________________________
Quisiera saber si hay alguna manera de poder dividir cadena y poder analizarla Ejemplo:
Cadena
FFFFFFFFFF125478FFFFFFFFFF584251FFFFFFFFFF
(FFFFFFFFFF) (125478) (FFFFFFFFFF) (584251) (FFFFFFFFFF)
_____________________________
Mi cadena cuenta con 42 caracteres la cual necesito comparar solo los números pero están mezclados entre "F" los cuales son de relleno y no puedo modificar, yo ingresare un usuario (user) y una contraseña (contra) y al comparar esas dos con el nombre y el password y comprobar que son iguales proceda a realizar la trigger donde borre la actual cadena la cual al compararla y comprobar que es igual a lo que yo pido coloque una nueva cadena, algo así:
_____________________________
Create trigger cadena
on Tabla1 for update
As
Declare @n1 Varchar(12)
Declare @p1 Smallint
Declare @cadena Varchar(42)
Select @n1 = Nombre, @p1 = password, @cadena = Cadena from Inserted
UPDATE tabla1
SET cadena= FFFFFFFFFF222222FFFFFFFFFF555555FFFFFFFFFF
WHERE user = @n1, contra = @p1, @cadena (EXTRAE(10;6) = 125478, @cadena (EXTRAE(26;6) = 584251
Go
______________________________
Lo que subraye y puse en cursiva es lo que no tengo idea de como hacerlo por eso puse EXTRAE como se usa en excel para hacer la comparación
seria de la cadena posición 10 y finaliza 6 caracteres después sea comparado con 125478 y siempre de la misma cadena desde la posición 26 y finaliza 6 caracteres después sea comparado con 584251 y si todo esto es igual entonces que la actual cadena sea borrada y reemplazada con una nueva cadena.
______________________________

1 respuesta

Respuesta
1
En SQL existe una sentencia muy parecida a la EXTRAE de excel se llama substring y la sintaxis es la siguiente:
SUBSTRING ( expression ,start , length )
Expression
Is a character string, binary string, text, image, a column, or an expression that includes a column. Do not use expressions that include aggregate functions.
Start
Is an integer that specifies where the substring starts. start can be of type bigint.
length
Is a positive integer that specifies how many characters or bytes of the expression will be returned. If length is negative, an error is returned. length can be of type bigint.
Mucha suerte.
Esta magnifica la función te doy gracias por tu ayuda, te consulto otra cosa, ¿así cómo esta función SUBSTRING que es para buscar y extraer hay alguna que sea lo contrario? ¿Cómo buscar y agregar?
Resulta que mi varaible cadena es varbinary y no puedo poner el código completo como te lo ejemplifique arriba (SET cadena= FFFFFFFFFF222222FFFFFFFFFF555555FFFFFFFFFF) ya que mi código completo cuenta con 3456 caracteres entonces necesitaría poder reemplazar los caracteres que hay por los que yo quiero.
_____________________________
Yo consideraría que las "F" que se encuentran en mi cadena son valores 0 como podría poner todo esta cadena en "F" porque si uso null me queda vacía y necesito que mantenga su longitud de 3456 caracteres o 3456 "F"
_____________________________
Perdón por la ignorancia más sin embargo trato de asimilar todo lo posible ya que lo que me has ayudado lo he entendido y lo he puesto en practica
_____________________________
Gracias nuevamente por tu ayuda
Asta donde se no existe un procedimiento, función o sentencia SQL que haga eso; pero puedes hacerla de manera más o menos fácil. Aquí te dejo un ejemplo.
Declare @Cadena1 Varchar(10)
Declare @Cadena2 Varchar(10)
Declare @Longitud SmallInt
Declare @Contador SmallInt
Declare @Tok Varchar (1)
SELECT @Cadena1 = cadena_original, @Longitud = len(cadena_original) FROM Tu_tabla WHERE CONDICIONES
Set @Contador = 1
Set @Cadena2 = ''
While @Contador <= @Longitud begin
Set @Tok = substring(@Cadena1, @Contador, 1)
If @Tok = '0' begin
Set @Cadena2 = @Cadena2 + 'F'
End
Else
Set @Cadena2 = @Cadena2 + @Tok
Set @Contador = @Contador + 1
End
Print @Cadena1
Print @Cadena2
Go
Sustituye los tipos de dato por los que necesitas. Mucha suerte

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas