Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/86.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在SQL中获取字符串的第一个字符?_Sql_Sql Server_Sql Server 2005 - Fatal编程技术网

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

如何在SQL中获取字符串的第一个字符?,sql,sql-server,sql-server-2005,Sql,Sql Server,Sql Server 2005,我有一个长度为6的SQL列。现在,我们只想获取该列的第一个字符。SQL中有任何字符串函数可以执行此操作吗?左侧(colName,1)也可以执行此操作。它相当于子字符串(colName,1,1) 我喜欢左边的,因为我觉得它有点干净,但实际上,两种方式都没有区别。子字符串(MyColumn,1,1)用于第一个字符,而子字符串(MyColumn,1,2)用于前两个字符。我更喜欢: SUBSTRING (my_column, 1, 1) 因为它是标准的SQL-92语法,因此更易于移植 严格地说,标准

我有一个长度为6的SQL列。现在,我们只想获取该列的第一个字符。SQL中有任何字符串函数可以执行此操作吗?

左侧(colName,1)
也可以执行此操作。它相当于
子字符串(colName,1,1)

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

子字符串(MyColumn,1,1)
用于第一个字符,而
子字符串(MyColumn,1,2)
用于前两个字符。

我更喜欢:

SUBSTRING (my_column, 1, 1)
因为它是标准的SQL-92语法,因此更易于移植


严格地说,标准版本是

SUBSTRING (my_column FROM 1 FOR 1)
关键是,从一个转换到另一个,从而转换到任何类似的供应商变体,都是微不足道的


p、 直到最近才有人向我指出,标准SQL中的函数故意与之相反,因为它们的参数列表不是传统的通配符,以使它们易于识别为来自标准

如果在Sql字符串中搜索字符串的第一个字符

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

=> return 4
输入


通过以下方法很容易实现

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

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


@Result=此i

左键选择所选字段中的前两个字符(字符串,整数中的字符数)


我不知道SQL server,但从逻辑上讲,数据库服务器在使用索引时可能比子字符串更好地优化左键。@thomasrutter,查看执行计划,SQL server(至少2008R2)在内部将
LEFT(colName,length)
转换为
SUBSTRING(colName,1,length)
。所以这里没有任何优化,只是一个首选项。谢谢,很多格式(包括我正在使用的格式)都不支持LEFT(str,n)。为什么索引以1开头,而不是以0开头?这将返回相同的结果:子字符串(my_列,1,1)=子字符串(my_列,0,2)。位置0是什么?
DECLARE @SomeString NVARCHAR(20) = 'This is some string'
DECLARE @Result NVARCHAR(20)
SET @Result = SUBSTRING(@SomeString, 2, 3)
SELECT @Result
SET @Result = LEFT(@SomeString, 6)
SELECT @Result
SELECT LEFT(FName, 2) AS FirstName FROM dbo.NameMaster