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

问题描述:

我有一个长度为6的SQL列。现在只想获取该列的第一个字符。 SQL中是否有任何字符串函数来执行此操作?如何获取SQL中的字符串的第一个字符?

LEFT(colName, 1)也会这样做。这相当于SUBSTRING(colName, 1, 1)

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

+0

我不知道有关SQL服务器,但在逻辑数据库服务器可能能够优化当它使用索引时,它比SUBSTRING更好。 – thomasrutter 2009-04-27 05:26:09

+7

@thomasrutter,查看执行计划,SQL Server(至少2008R2)在内部将'LEFT(colName,length)'转换为'SUBSTRING(colName,1,length)'。所以**这里没有任何优化**,这只是一个偏好。 – 2014-09-15 15:15:53

SUBSTRING (MyColumn, 1 , 1)第一个字符和SUBSTRING (MyColumn, 1 , 2)第二个。

我喜欢:

SUBSTRING (my_column, 1, 1) 

,因为它是标准的SQL-92语法,因此更便于携带。


严格地说,标准版本将是

SUBSTRING (my_column FROM 1 FOR 1) 

的要点是,从一个到另一个变换,因此于任何类似的供应商的变化,是微不足道的。

p.s.直到最近我才指出,标准SQL中的函数是故意相反的,因为它们的参数列表并不是传统的commalist,为了使它们易于被标识为标准!

+0

谢谢,LEFT(str,n)不支持许多格式(包括我使用的格式)。 – GreySage 2016-03-20 21:31:38

如果搜索字符串的第一个字符的SQL字符串

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

=> return 4 

INPUT

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 

SELECT SUBSTR(thatColumn, 1, 1) As NewColumn from student 

它是简单通过以下来实现:

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