2017-09-19 4 views
0

[{"key": "Mobile", "value": "9100617634"}, {"key": "Email", "value": " [email protected] "}]Comment obtenir 2 sous-chaînes comme 2 colonnes à partir d'une seule colonne du tableau

La ligne ci-dessus représente la valeur dans une colonne d'une table. Je veux 2 colonnes nommées comme mobile et email où celles ayant des valeurs comme 9000617634, balajirao @ ziraff, respectivement. Comment accéder au serveur sql.

voir ci-dessous.

mobile    Email 
------    ------------ 
9100617634   [email protected] 
+0

quelle version du serveur SQL vous utilisez? travailler avec des données json est pris en charge à partir du serveur sql 2016. https://docs.microsoft.com/en-us/sql/relational-databases/json/json-data-sql-server – Yeou

+0

version 2016 sql – Balajirao

Répondre

0

SELECT cas lorsque [MOBILE/PHONE] comme [az]% 'alors nul autre extrémité [MOBILE/PHONE] en tant que [MOBILE/PHONE], cas où ISNUMERIC (email) = 0 alors EMAIL se termine comme EMAIL DE ( sélectionnez sélectionnez REMPLACER (SUBSTRING (droite (gauche (AC.Communication, charindex ('}', AC.Communication)), len (gauche (AC.Communication , charindex ('}', AC.Communication))) - charindex (':', gauche (AC.Communication, charindex ('}', AC.Communication)))), LEN (droite (gauche (AC.Communication, charindex ('}', AC.Communication)), len (à gauche (AC.Communication, charindex ('}', AC.Communication))) - charindex (':', left (AC.Communicatio n, charindex ('}', AC.Communication))))) - CHARINDEX (':', à droite (à gauche (AC.Communication, charindex ('}', AC.Communication)), len (à gauche (AC.Communication , charindex ('}', AC.Communication))) - charindex (':', gauche (AC.Communication, charindex ('}', AC.Communication)))))), 2, CHARINDEX (']', AC.Communication)), '"}', '') AS [MOBILE/PHONE], REMPLACER (REMPLACER (GAUCHE (droite) (AC.Communication, charindex (':', inverse (AC.Communication))), LEN (à droite (AC.Communication, charindex (':', reverse (AC.Communication)))) - charindex ('}', reverse (AC.Communication, charindex (':', reverse (AC.Communication)))))), ': "', » '),' " », '') AS EMAIL

de DimAccountContact comme AC

+0

a obtenu le résultat requis pour moi en fonction de quelques modifications apportées aux réponses ci-dessus – Balajirao

0

U peut utiliser Pivot fonction pour convertir les valeurs de la ligne à la colonne, est en dessous du code statique pour la mise en œuvre

SELECT * FROM(
    SELECT 
    columns_name 
    FROM 
     table_name 
    ) M 
    PIVOT (MAX(Key) FOR table_name IN (mobile ,Email))AS P ; 
+0

n'a pas produit le résultat – Balajirao

0

Eh bien, ce fut plaisir à le faire à la dure :)

--initial string 
declare @s1 varchar(1000) = (select '[{"key":"Mobile","value":"9100617634"},{"key":"Email","value":"[email protected]"}]') 

--selecting first part and second part of string 
declare @mobile varchar(100) = (select right(left(@s1,charindex('}',@s1)-1),len(left(@s1,charindex('}',@s1))) - charindex(':',left(@s1,charindex('}',@s1)))-1)) 
declare @mail varchar(100) = (select right(@s1,charindex(':',reverse(@s1))-1)) 

--getting rid of extra characters 
set @mobile = (right(@mobile, len(@mobile) - charindex(':',@mobile))) 
set @mail = (left(@mail, len(@mail) - charindex('}',reverse(@mail)))) 


--getting rid of double quotes 
set @mobile = replace(@mobile,'"','') 
set @mail = replace(@mail,'"','') 

--selecting data 
select 
@mobile as Mobile, 
@mail as Mail 

Le résultat est la suivante:

Mobile Mail [email protected]