una right parte left extraer ejemplos charindex caracteres caracter cadena buscar sql-server tsql string

sql server - right - Cómo extraigo parte de una cadena en t-sql



sql server substring right (4)

Si tengo la siguiente variable nvarchar, BTA200, ¿cómo puedo extraer solo la BTA de ella?

Además, si tengo longitudes variables como BTA50, BTA030, ¿cómo puedo extraer solo la parte numérica?


LEFT (''BTA200'', 3) funcionará para los ejemplos que haya dado, como en:

SELECT LEFT(MyField, 3) FROM MyTable

Para extraer la parte numérica, puede usar este código

SELECT RIGHT(MyField, LEN(MyField) - 3) FROM MyTable WHERE MyField LIKE ''BTA%'' --Only have this test if your data does not always start with BTA.


Yo recomendaría una combinación de PatIndex y Left. Con una construcción cuidadosa, puede escribir una consulta que siempre funcione, sin importar cuáles sean sus datos.

Ex:

Declare @Temp Table(Data VarChar(20)) Insert Into @Temp Values(''BTA200'') Insert Into @Temp Values(''BTA50'') Insert Into @Temp Values(''BTA030'') Insert Into @Temp Values(''BTA'') Insert Into @Temp Values(''123'') Insert Into @Temp Values(''X999'') Select Data, Left(Data, PatIndex(''%[0-9]%'', Data + ''1'') - 1) From @Temp

PatIndex buscará el primer carácter que esté en el rango de 0-9, y devolverá su posición de carácter, que puede usar con la función IZQUIERDA para extraer los datos correctos. Tenga en cuenta que PatIndex está usando datos + ''1''. Esto nos protege de los datos donde no se encuentran números. Si no hay números, PatIndex devolvería 0. En este caso, la función IZQUIERDA arrojaría un error porque estamos usando Left (Data, PatIndex - 1). Cuando PatIndex devuelva 0, terminaríamos con Left (Data, -1) que devuelve un error.

Todavía hay formas en que esto puede fallar. Para una explicación completa, te animo a leer:

Extrayendo números con SQL Server

Ese artículo muestra cómo sacar números de una cadena. En su caso, quiere obtener caracteres alfabéticos en su lugar. Sin embargo, el proceso es lo suficientemente similar como para que puedas aprender algo útil de él.


substring (field, 1,3) funcionará en sus ejemplos.

select substring(field, 1,3) from table

Además, si la parte alfabética es de longitud variable, puede hacer esto para extraer la parte alfabética:

select substring(field, 1, PATINDEX(''%[1234567890]%'', field) -1) from table where PATINDEX(''%[1234567890]%'', field) > 0


declare @data as varchar(50) set @data=''ciao335'' --get text Select Left(@Data, PatIndex(''%[0-9]%'', @Data + ''1'') - 1) ---->>ciao --get numeric Select right(@Data, len(@data) - (PatIndex(''%[0-9]%'', @Data )-1) ) ---->>335