2012-02-21 11 views
5
--get text target starting integers into a table 

declare @target TABLE([USERID] varchar(25),[target] int) 

--get text stopping point integers into a table 

declare @stop TABLE([USERID] varchar(25),[target] int, [stop] int) 

--get just the options I want into a table 

declare @options TABLE ([USERID] varchar(25), [userDetails] text) 
insert into @options ([userid], [userDetails]) 
select u.userid, rtrim(ltrim(SUBSTRING([userDetails], s.[target], s.[stop] - s.[target]))) 
from users u join @stop s on u.userid = s.userid 

declare @userDetails varchar(max) 
Select top 1 
@userDetails = [userDetails] 
from @options 
select charindex(char(32), @userDetails) 

Todo lo que obtengo es 0 de este charindex, lo he intentado en lugar de char (32). He intentado cambiar el texto a varchar pero, por lo que veo, no tiene sentido ya que el texto se está desaprobando y ya se lo trata como varchar?CHARINDEX siempre devuelve 0 en una búsqueda de espacios en blanco en un TEXTO Columna

Cuando copio y pego el elemento de detalles de usuario en una sola cadena entrecomillada y lo coloco en la función charindex todo funciona como se espera.

El texto original que se llena @userDetails se ve así:

clave

= valor de clave = valor de clave = valor

+0

¿Hay espacios principales y finales? – JNK

+0

No debería haberlo desde que tengo ese RTRIM (LTRIM (pieza adentro) –

+0

Incluso he intentado moverme a la posición 2 con charindex (,, 2) para evitar eso y todavía arroja 0 de vuelta –

Respuesta

3

Cambiar a "Resultados de texto" en SSMS, para ver qué es realmente salida. Si está en "Resultados a la cuadrícula", los CRLF se convierten a espacios en blanco.

Como @PhilipKelley menciona en los comentarios,

el movimiento entre las columnas se convierte a caracteres [TAB] ...

Ahora la búsqueda de char (13) o retorno de carro me permite para encontrar el personaje que está entre cada uno de mis pares clave = valor. También explica por qué hay 2 espacios en blanco, estos son los CRLF que el programa que estaba escribiendo estos datos se utilizan para romper cada entrada

@Dems, me recordaron que

cubiertas "espacio en blanco" tabulaciones, retornos de carro, y toda una serie de otras entidades,

también un tema similar discutido en este sitio en another discussion

0

userDetailsIndex = pATINDEX ('%%', DetallesUsuario)

+0

Bienvenido a SO! Por favor, recuerde mejorar sus respuestas explicando lo que están haciendo. Además, en este caso, su respuesta solo coincide con el carácter de espacio y no con otros caracteres de espacio en blanco. –

Cuestiones relacionadas