Як отримати перший символ рядка в SQL?


262

У мене стовпчик SQL довжиною 6. Тепер я хочу взяти лише перший знак цього стовпця. Чи є якась рядова функція в SQL для цього?

Відповіді:


436

LEFT(colName, 1)також це зробимо. Це рівнозначно SUBSTRING(colName, 1, 1).

Мені це подобається LEFT, оскільки я вважаю його трохи чистішим, але насправді, різниці немає.


2
Я не знаю про SQL-сервер, але логічно, сервер бази даних може бути в змозі оптимізувати лівий ліпший показник, ніж SUBSTRING, коли він використовує індекс.
thomasrutter

19
@thomasrutter, дивлячись на план виконання, SQL Server (принаймні 2008R2) внутрішньо перекладається LEFT(colName, length)на SUBSTRING(colName, 1, length). Так що тут немає ніяких оптимізацій , це лише вподобання.
Олександр Абакумов

44

Я віддаю перевагу:

SUBSTRING (my_column, 1, 1)

тому що це стандартний синтаксис SQL-92 і тому більш портативний.


Строго кажучи, стандартна версія була б

SUBSTRING (my_column FROM 1 FOR 1)

Справа в тому, що перетворення від одного до іншого, отже, до будь-якого подібного варіанта постачальника є тривіальним.

ps Мене нещодавно вказували, що функції в стандартному SQL навмисно суперечать, маючи списки параметрів, які не є звичайними комуністами, щоб зробити їх легко ідентифікованими як стандартні!


1
Дякую, LEFT (str, n) не підтримується багатьма форматами (включаючи той, який я використовую).
GreySage

1
Чому індекс починається з 1, а не з 0? Це повертає той самий результат: SUBSTRING (my_column, 1, 1) = SUBSTRING (my_column, 0, 2). Що це в позиції 0?
FrenkyB

19

SUBSTRING ( MyColumn, 1 , 1 )для першого персонажа та SUBSTRING ( MyColumn, 1 , 2 )для перших двох.



13

Це легко досягти наступним чином

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

Або

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

@Result = his

або

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

@Result = This i


3

ВХОД

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

2

Якщо ви шукаєте перший char рядка в рядку Sql

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

=> return 4

2

Виберіть Перші два символи у вибраному полі за допомогою Left(string,Number of Char in int)

SELECT LEFT(FName, 2) AS FirstName FROM dbo.NameMaster
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.