2011-12-02 21 views

Respuesta

87
SELECT RIGHT(column, 3) 

Eso es todo lo que necesita.

También puede hacer LEFT() de la misma manera.

Tenga en cuenta si está utilizando esto en una cláusula WHERE que el RIGHT() no puede usar ningún índice.

+7

Si * va a buscar grandes volúmenes de datos de esta manera, * hay * una forma de recuperar el uso de los índices. Cree una columna calculada que sea la cadena en orden inverso. Entonces, ¿cuáles eran los tres caracteres correctos (menos significativos) ahora son los tres caracteres izquierdos (más significativos)? A continuación, indexe esa columna y busque 'WHERE LEFT (invertido, 3) = REVERSE ('190')'. (Estoy aburrido, ¿puedes decirlo?) – MatBailie

+0

¡Gracias chicos! – Jared

13

Se puede utilizar cualquier manera:

SELECT RIGHT(RTRIM(columnName), 3) 

O

SELECT SUBSTRING(columnName, LEN(columnName)-2, 3) 
+0

¿Hay una ventaja de una manera sobre la otra? ¿Y es necesario el RTRIM (me parece superfluo)? – noelicus

+0

El trabajo se puede hacer de varias maneras y aquí he mostrado el uso de dos maneras comunes. El primer caso es más rápido que la segunda vía. RTRIM no es obligatorio. Se usa para omitir cualquier espacio adicional en el lado derecho. Gracias –

5

Porque más formas de pensar en ello siempre son buenos:

select reverse(substring(reverse(columnName), 1, 3)) 
+1

No, más no siempre es mejor. –

+1

Tienes razón. Siempre tendrá todas las herramientas que necesita para lograr cualquier trabajo que esté tratando de hacer. El conocimiento no es igual al poder, supongo. –

+0

No estoy muy seguro de lo que se supone que significa. La solución que usted propone es innecesariamente compleja, y no hay ninguna circunstancia en la cual sea la solución correcta. Por lo tanto, es malo. –

1
declare @newdata varchar(30) 
set @newdata='IDS_ENUM_Change_262147_190' 
select REVERSE(substring(reverse(@newdata),0,charindex('_',reverse(@newdata)))) 

Explicación === ===

me pareció más fácil de leer escribe así:

SELECT 
    REVERSE(--4. 
     SUBSTRING(-- 3. 
      REVERSE(<field_name>), 
      0, 
      CHARINDEX(-- 2. 
       '<your char of choice>', 
       REVERSE(<field_name>) -- 1. 
      ) 
     ) 
    ) 
FROM 
    <table_name> 
  1. Invertir el texto
  2. Busca la primera aparición de un caracter specif (es decir, primera aparición DESDE FINAL del texto). Obtiene el índice de este char
  3. Mira de nuevo el texto invertido. busca desde el índice 0 hasta el índice de tu char. Esto le da a la cadena que está buscando, pero a la inversa
  4. invertido la secuencia inversa para darle su subcadena deseada
+1

Una explicación para acompañar su código es útil – krsteeve

+0

Los comentarios de Stackoverflow.com pueden aceptar el formateo por marcado simple (formato de marcado). Hay ayuda disponible Para mostrar el segmento de código, puede prefijar cada línea con cuatro espacios. – FooF

-3

si usted quiere encontrar específicamente cuerdas que termina con caracteres deseados entonces esto ayudará a ..

select * from tablename where col_name like '%190' 
+1

Esto no responde la pregunta. El OP quiere saber cómo obtener los últimos 3 caracteres, sin importar cuáles sean, ni una cadena específica como 190. – BradleyDotNET

Cuestiones relacionadas