【问题标题】:How to get first character of a string in SQL?如何在 SQL 中获取字符串的第一个字符?
【发布时间】:2010-10-21 23:51:47
【问题描述】:

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

【问题讨论】:

    标签: sql sql-server sql-server-2005


    【解决方案1】:

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

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

    【讨论】:

    • 我不了解 SQL 服务器,但从逻辑上讲,数据库服务器在使用索引时可能能够比 SUBSTRING 更好地优化 LEFT。
    • @thomasrutter,查看执行计划,SQL Server(至少 2008R2)在内部将 LEFT(colName, length) 转换为 SUBSTRING(colName, 1, length)。所以这里没有任何优化,这只是一个偏好。
    • LEFT 不适用于 Firebird 1.5
    【解决方案2】:

    我更喜欢:

    SUBSTRING (my_column, 1, 1)
    

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


    严格来说,标准版应该是

    SUBSTRING (my_column FROM 1 FOR 1)
    

    关键是,从一个转换到另一个,因此转换为任何类似的供应商变体,都是微不足道的。

    附言直到最近才向我指出,标准 SQL 中的函数是故意相反的,其参数列表不是传统的 commalist,以便使它们易于识别为来自标准!

    【讨论】:

    • 谢谢,许多格式(包括我正在使用的格式)都不支持 LEFT(str, n)。
    • 为什么索引是从1开始而不是从0开始的?这将返回相同的结果:SUBSTRING (my_column, 1, 1) = SUBSTRING (my_column, 0, 2)。位置 0 是什么?
    • 这也适用于 SQLite,谢谢!
    【解决方案3】:

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

    【讨论】:

      【解决方案4】:
      SELECT SUBSTR(thatColumn, 1, 1) As NewColumn from student
      

      【讨论】:

        【解决方案5】:

        通过以下方式实现很简单

        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

        【讨论】:

          【解决方案6】:

          输入

          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
          

          【讨论】:

            【解决方案7】:

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

            SELECT CHARINDEX('char', 'my char')
            
            => return 4
            

            【讨论】:

              【解决方案8】:

              使用Left(string,Number of Char in int)选择选定字段中的前两个字符

              SELECT LEFT(FName, 2) AS FirstName FROM dbo.NameMaster
              

              【讨论】:

                猜你喜欢
                • 2011-03-26
                • 2017-07-27
                • 1970-01-01
                • 1970-01-01
                • 2015-07-02
                • 1970-01-01
                • 1970-01-01
                相关资源
                最近更新 更多