如何在SQL中获取字符串的第一个字符?


262

我有一个长度为6的SQL列。现在只想获取该列的第一个字符。SQL中是否有任何字符串函数可以做到这一点?

Answers:


436

LEFT(colName, 1)也将这样做。等同于SUBSTRING(colName, 1, 1)

我喜欢LEFT,因为我发现它更干净,但实际上,两种方式都没有区别。


2
我不了解SQL Server,但是从逻辑上讲,数据库服务器在使用索引时可能比SUBSTRING更好地优化LEFT。
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

如果您在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
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.