2009-04-27 40 views

Respuesta

280

LEFT(colName, 1) también lo hará. Es equivalente a SUBSTRING(colName, 1, 1).

Me gusta LEFT, ya que me parece un poco más limpio, pero en realidad, no hay diferencia en ambos sentidos.

+0

No sé sobre el servidor SQL, pero lógicamente un servidor de base de datos puede ser capaz de optimizar IZQUIERDA mejor que SUBSTRING cuando usa un índice. – thomasrutter

+7

@thomasrutter, mirando un plan de ejecución, SQL Server (al menos 2008R2) internamente traduce 'LEFT (colName, length)' en 'SUBSTRING (colName, 1, length) '. Entonces ** no hay optimizaciones ** aquí, es solo una preferencia. –

11

SUBSTRING (MyColumn, 1 , 1) para el primer carácter y SUBSTRING (MyColumn, 1 , 2) para los primeros dos.

28

Prefiero:

SUBSTRING (my_column, 1, 1) 

porque es estándar sintaxis SQL-92 y por lo tanto más fáciles de transportar.


Estrictamente hablando, la versión estándar sería

SUBSTRING (my_column FROM 1 FOR 1) 

El punto es, la transformación de una a la otra, por lo tanto, a cualquier variación de proveedor similares, es trivial.

p.s. Recientemente me dijeron que las funciones en el SQL estándar son deliberadamente contrarias, al tener listas de parámetros que no son los commalists convencionales, ¡para hacerlos fácilmente identificables como del estándar!

+0

Gracias, IZQUIERDA (str, n) no es compatible con muchos formatos (incluido el que estoy usando). – GreySage

0

Si usted busca el primer carácter de la cadena en cadena SQL

SELECT CHARINDEX('char', 'my char') 

=> return 4 
1

ENTRADA

STRMIDDLENAME 
-------------- 
Aravind Chaterjee 
Shivakumar 
Robin Van Parsee 

SELECT STRMIDDLENAME, 
CASE WHEN INSTR(STRMIDDLENAME,' ',1,2) != 0 THEN SUBSTR(STRMIDDLENAME,1,1) || SUBSTR(STRMIDDLENAME,INSTR(STRMIDDLENAME,' ',1,1)+1,1)|| 
SUBSTR(STRMIDDLENAME,INSTR(STRMIDDLENAME,' ',1,2)+1,1) 
WHEN INSTR(STRMIDDLENAME,' ',1,1) != 0 THEN SUBSTR(STRMIDDLENAME,1,1) || SUBSTR(STRMIDDLENAME,INSTR(STRMIDDLENAME,' ',1,1)+1,1) 
ELSE SUBSTR(STRMIDDLENAME,1,1) 
END AS FIRSTLETTERS 
FROM Dual; 

OUTPUT 
STRMIDDLENAME     FIRSTLETTERS 
---------      ----------------- 
Aravind Chaterjee    AC   
Shivakumar      S 
Robin Van Parsee     RVP 
4
SELECT SUBSTR(thatColumn, 1, 1) As NewColumn from student 
5

Es fácil de lograr esto mediante la siguiente:

DECLARE @SomeString NVARCHAR(20) = 'This is some string' 
DECLARE @Result NVARCHAR(20) 

y ya sea

SET @Result = SUBSTRING(@SomeString, 2, 3) 
SELECT @Result 

@Result: his

-O-

SET @Result = LEFT(@SomeString, 6) 
SELECT @Result 

@Result: This i

Cuestiones relacionadas