Как получить первый символ строки в SQL?

У меня есть столбец SQL длиной 6. Теперь я хочу взять только первый символ этого столбца. Есть ли в SQL для этого строковая функция?


person Vinod    schedule 27.04.2009    source источник


Ответы (7)


LEFT(colName, 1) тоже сделает то же самое. Это эквивалент SUBSTRING(colName, 1, 1).

Мне нравится LEFT, так как я считаю его немного чище, но на самом деле разницы в любом случае нет.

person Eric    schedule 27.04.2009
comment
Я не знаю о SQL-сервере, но логически сервер базы данных может оптимизировать LEFT лучше, чем SUBSTRING, когда он использует индекс. - person thomasrutter; 27.04.2009
comment
@thomasrutter, Глядя на план выполнения, SQL Server (по крайней мере, 2008R2) внутренне переводит LEFT(colName, length) в SUBSTRING(colName, 1, length). Так что здесь нет никаких оптимизаций, это просто предпочтение. - person Alexander Abakumov; 15.09.2014

Я предпочитаю:

SUBSTRING (my_column, 1, 1)

потому что это стандартный синтаксис SQL-92 и, следовательно, более переносимый.


Строго говоря, стандартная версия была бы

SUBSTRING (my_column FROM 1 FOR 1)

Дело в том, что переход от одного к другому, а следовательно, к любому аналогичному варианту поставщика, является тривиальным.

p.s. Только недавно мне было указано, что функции в стандартном SQL намеренно противоречат друг другу, имея списки параметров, которые не являются обычными коммунистами, чтобы их можно было легко идентифицировать как относящиеся к стандарту!

person onedaywhen    schedule 27.04.2009
comment
Спасибо, LEFT (str, n) не поддерживается многими форматами (включая тот, который я использую). - person GreySage; 21.03.2016
comment
Почему индекс начинается с 1, а не с 0? Это возвращает тот же результат: SUBSTRING (my_column, 1, 1) = SUBSTRING (my_column, 0, 2). Что это в позиции 0? - person FrenkyB; 26.08.2019

SUBSTRING ( MyColumn, 1 , 1 ) для первого символа и SUBSTRING ( MyColumn, 1 , 2 ) для первых двух.

person Damovisa    schedule 27.04.2009

Этого легко добиться, используя следующие

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

Либо

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

@Result = his

or

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

@Result = This i

person jet_choong    schedule 19.07.2016

ВХОД

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
person Shiv    schedule 19.11.2012

Если вы ищете первый символ строки в строке Sql

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

=> return 4
person LittleJC    schedule 07.03.2012

Выберите первые два символа в выбранном поле с помощью Left(string,Number of Char in int)

SELECT LEFT(FName, 2) AS FirstName FROM dbo.NameMaster
person Darshan    schedule 20.04.2019