2010-09-20 4 views
0

En SQL, supposons que j'ai un employé de table et ai une colonne en tant que nom contenant tous les noms dans le format FirstName, LastName. Ex: Nayeem, Khan. Je veux aller chercher tous les noms de famille seulement, c'est-à-dire Khan.quelle pourrait être la requête pour récupérer tous les enregistrements séparés par des virgules dans SQL?

+0

Comment puis-je accepter jusqu'à ce que j'obtenir ce que je veux – NayeemKhan

+0

Si vous n'avez pas ce que vous voulez, puis identifier ce dont vous avez réellement besoin et pourquoi les suggestions qui vous ont été proposées ne satisfont pas vos exigences –

Répondre

1

ORACLE ou d'une solution MySQL

select DISTINCT SUBSTR(name,INSTR(name,',')+1) 
    from employee 

EDIT

Pour SQL Server, essayez

select SUBSTRING(name,CHARINDEX(',',name)+1,999) 
    from employee 

suppose que le nom sera toujours contenir un,

+0

Il donne la sortie telle quelle. selon mon exemple o/p est toujours Nayeem, Khan. – NayeemKhan

+0

Essayez d'inverser le ',' et les arguments de nom dans la fonction CHARINDEX, comme je l'ai fait dans mon exemple –

+0

Son travail !! – NayeemKhan

0

Vous n'avez pas mentionné le DB. Vous pouvez essayer quelque chose comme dans MySQL:

SELECT SUBSTRING(name,LOCATE(",",name)+1) 
FROM TABLE_NAME 
+0

Comme ça, mais le 'WHERE' a perdu un E en traduction et est devenu WHERE – Woody

+0

Je pense qu'il veut aussi extraire le nom de famille mais la fonction utiliser dépend de son SGBD –

+0

Khan est juste un exemple. Cela donnera tous les noms se terminant par, khan. Je ne veux que le nom de famille du nom de la colonne – NayeemKhan

1

Dans oracle, ce serait

select substr(name, 1, instr(name. ',') - 1) as first_name, 
     substr(name, instr(name. ',') + 1) as last_name 
from TABLE_NAME 
+0

Je suggérerais aussi de rogner chaque sous-résultat au cas où il y aurait des espaces avant/après la virgule – JohnoBoy

+0

donnez svp la solution pour SQL Server 2005 DB – NayeemKhan

+1

Si vous aviez voulu SQL server 2005 DB, il aurait été mieux si vous laissiez nous savons que dès le début –

0

Voici une solution postgreSQL:

SELECT SUBSTRING(name from ',(.+)$') FROM table; 


SELECT SUBSTRING('foo,bar' from ',(.+)$') ; 
substring 
----------- 
bar 
(1 row) 
+0

son dicton- Syntaxe incorrecte près du mot-clé «de». J'utilise SQL Server 2005 – NayeemKhan

+0

C'est pour PostgreSQL, je ne connais pas SQL Server. Mais peut-être il y a une fonction similaire. – Toto

+0

merci .. pas de problème – NayeemKhan

Questions connexes