Extrae los caracteres a la derecha de un valor delimitado en una instrucción SELECT

Necesito extraer todos los caracteres a la derecha de un guión como parte de una statement seleccionada. Habrá otras columnas en la selección. En la consulta siguiente, los tres caracteres correctos se seleccionan de la segunda columna. ¿Cómo extraería un número indefinido de caracteres a la derecha de un delimitador, en mi caso un guión? ¿Puedo usar la function correcta? ¿Debo usar otra function?

Select column1, right(column2,3) as extracted, column3 From myTable 

Estoy usando SQL Server 2008.

Esta pregunta tiene una respuesta específica a la database.

Si usa SQL Server:

 SELECT column1 , RIGHT(column2,CHARINDEX('-',REVERSE(column2))-1) as extracted , column3 FROM myTable 

Puede agregar una instrucción CASE o usar NULLIF() en caso de que el guión no esté siempre presente:

 SELECT column1 , CASE WHEN column2 LIKE '%-%' THEN RIGHT(column2,CHARINDEX('-',REVERSE(column2))-1) END as extracted , column3 FROM myTable 

O:

 SELECT column1 , RIGHT(column2,NULLIF(CHARINDEX('-',REVERSE(column2)),0)-1) as extracted , column3 FROM myTable 

Si usa MySQL simplemente cambie CHARINDEX() a LOCATE() . Creo que Oracle es INSTR() y los primeros dos parameters están cambiados, primero es la cadena que está buscando, luego la cadena que está buscando.

Qué tal si:

 SUBSTRING(column2, CHARINDEX('-',column2)+1, 8000) 

(Reemplace 8000 con la definición de la columna).

Por supuesto, si la columna no siempre contiene un guión, entonces puede decir:

 SUBSTRING(column2, COALESCE(NULLIF(CHARINDEX('-',column2)+1,1),1),8000) 

Si la columna no contiene un guion, obtendrás la columna completa. Si desea excluir esos del resultado, puede agregar una cláusula WHERE :

 WHERE CHARINDEX('-', column2) > 0 

O puede usar una expresión CASE como la respuesta de Goat CO.

    Intereting Posts