2010-12-10 17 views
0

Si j'exécute cette requête, j'obtiens une sortie, mais pas la sortie désirée. Je voudrais obtenir la sortie comme:Problème de requête T-SQL?

FirstName       LastName 


ADT         NULL 
---------------------------------------------------------------------------- 

Voici ma question:

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] 

La sortie sera pour cette requête est:

FirstName LastName 

NULL   ADT 
------------------------------------------ 

Merci d'avance pour votre aide .

Répondre

0

Peut-être pas le plus efficace, mais répond à l'exigence.

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] 

Voici une déclaration mise à jour basée sur l'exigence clarifiée. La fonction de chaîne REVERSE est très pratique et le LTRIM est dû à un problème d'espace dans la colonne 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] 
+0

Merci beaucoup pour votre aide, mais la situation est dans ma première ligne la valeur est un seul mot ADT mais dans la deuxième ligne la valeur est deux mots ADT SESSION et dans la troisième rangée la valeur est ADT SAMPLE DATABASE CASE. alors comment pouvons-nous diviser le 1er mot en 1ère colonne et 2ème mot en 2ème colonne et s'il vient à la 3ème rangée il y a quatre valeurs et les 1ers 3 mots devraient venir en 1er cloumn et le dernier mot devrait aller à la 2ème colonne. – Sahastra

0

Deux options:

  • Ajouter un chèque spécial cas si @FullName contient un espace

ou

  • Retirez le cas particulier en ajoutant un espace à la fin.

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

Merci beaucoup pour votre aide ..... – Sahastra

0

You Mean ADT BASE DE DONNÉES EXEMPLE EN CAS DE FirstName et LastName

+0

oui exactement .... – Sahastra