Tsql T-SQL查询问题?

Tsql T-SQL查询问题?,tsql,Tsql,如果执行此查询,我将获得一个输出,但不是所需的输出。我希望得到如下输出: FirstName LastName ADT NULL ---------------------------------------------------------------------------- 我的问题是: DECLARE @FullName VARCHAR(100) SET @

如果执行此查询,我将获得一个输出,但不是所需的输出。我希望得到如下输出:

FirstName                            LastName


ADT                                  NULL 
----------------------------------------------------------------------------
我的问题是:

DECLARE @FullName VARCHAR(100)

SET @FullName = 'ADT'

SELECT SUBSTRING(@FullName, 1, NULLIF(CHARINDEX(' ', @FullName) - 1, -1)) AS [FirstName],

SUBSTRING(@FullName, CHARINDEX(' ', @FullName) + 1, LEN(@FullName)) AS [LastName]
此查询的输出为:

FirstName    LastName

NULL           ADT
------------------------------------------
提前感谢您的帮助。

有两种选择:

  • 如果
    @FullName
    包含空格,则添加特殊情况检查

  • 通过在末尾添加空格来删除特殊情况

    declare @fullName varchar(100) = 'ADT'
    select 
        LEFT(@fullName, charindex(' ',@fullName+' ')-1) as FirstName,
        SUBSTRING(@fullname,charindex(' ',@fullName+' ')+1,LEN(@fullname)) as last
    

    • 也许不是最有效的,但符合要求

      DECLARE @FullName VARCHAR(100)
      
      SET @FullName = 'ADT'
      
      SELECT SUBSTRING(@FullName, 0, ISNULL(NULLIF(CHARINDEX(' ', @FullName), 0), LEN(@FullName) + 1)) AS [FirstName]
      , SUBSTRING(@FullName, NULLIF(CHARINDEX(' ', @FullName) + 1, 1), LEN(@FullName) - CHARINDEX(' ', @FullName) + 1) AS [LastName]
      
      以下是基于澄清要求的更新声明。反向字符串函数很方便,LTRIM是由于LastName列的前导空格问题造成的

      DECLARE @FullName VARCHAR(100)
      
      SET @FullName = 'ADT SAMPLE DATABASE CASE'
      
      SELECT SUBSTRING(@FullName, 0, ISNULL(NULLIF(LEN(@FullName) + 1 - CHARINDEX(' ', REVERSE(@FullName)), 0), LEN(@FullName) + 1)) AS [FirstName]
      , LTRIM(SUBSTRING(@FullName, NULLIF(LEN(@FullName) - CHARINDEX(' ', REVERSE(@FullName)), LEN(@FullName)) + 1, LEN(@FullName) - (LEN(@FullName) - CHARINDEX(' ', REVERSE(@FullName))))) AS [LastName]
      

      您的意思是ADT SAMPLE DATABASE AS FirstName和CASE AS LastName

      非常感谢您的帮助,但情况是在我的第一行中,值为单字ADT,但在第二行中,值为两字ADT SESSION,在第三行中,值为ADT SAMPLE DATABASE CASE。因此,我们如何将第一列中的第一个单词和第二列中的第二个单词分开,如果它位于第三行,则有四个值,前三个单词应位于第一行,最后一个单词应位于第二列。