-1
votes

SQL Server: Trouver la valeur dans une chaîne

J'utilise:

  • Microsoft SQL Server 2016 (SP1) (X64) sur Windows Server 2012 R2
  • Studio de gestion de Server Microsoft SQL Server 14.0.17213.0

    J'ai les valeurs suivantes dans une table:

    Table NEW_VALUE à partir de DB USM_System_Change_Detail

    J'ai besoin d'une requête qui trouve la valeur pour txtf_dns_name = dans la colonne "dns_texto" et ne renvoie que le résultat. Dans l'exemple, ce ne serait que "first_domain" et "second_domain"

    Après avoir utilisé les conseils des collègues, j'ai pu faire partiellement: xxx

    Ceci retourne: xxx

    mais si je supprimais la clause Où, je reçois ceci:

    Mensagem 245, Nevvel 16, Estado 1, Linha 1
    La conversion a échoué lors de la conversion de la valeur VARCHAR 'F8543002' vers Type de données Int.


6 commentaires

Quelle version de SQL Server? S'il vous plaît aussi poster le SQL que vous avez essayé.


Quelle version de SQL-Server utilisez-vous?


Aussi ... je pense qu'il y a une erratum dans la chaîne que vous avez postée comme valeur txtf_dns_name n'est pas dans votre exemple


Bâtiment de l'ange M. dans votre exemple de chaîne, c'est txtf_dns_nome = pas txtf_dns_name =


Veuillez indiquer votre tentative d'utiliser la sous-chaîne et quelle erreur vous avez eue.


Microsoft SQL Server 2016 (SP1) (x64) sur Windows Server 2012 R2


3 Réponses :


0
votes

Vous pouvez utiliser une sous-chaîne imbriquée . Comme les commentaires indiqués, txtf_dns_nome était dans la chaîne, pas txtf_dns_name xxx

Ceci obtient essentiellement la sous-chaîne à partir de txtf_dns_nome à la fin de la chaîne, puis à partir de cette chaîne, obtient la sous-chaîne sur la première virgule, qui vous laisse avec votre valeur.


0 commentaires

0
votes
Declare @Pattern as NVARCHAR(100);
SET @Pattern = 'txtf_contact_name=';

select 
    SUBSTRING(MyValue, CHARINDEX(@Pattern, MyValue) + LEN(@Pattern), CHARINDEX('=', MyValue, CHARINDEX(@Pattern, MyValue))) as R
from 
    Table_2
where 
    MyValue like '%' + @Pattern + '%'

0 commentaires

0
votes

Voici une solution possible en utilisant remplacer , SUBSTRING , len et charindex : xxx < / Pré>

Si vous en avez besoin comme une solution de table, effectuez simplement ce qui suit, je la divise dans un exemple ci-dessus pour essayer d'expliquer ce qui se passe et de vous donner un exemple de test.

Solution de table: xxx

éventuellement meilleure solution de table car cela n'utilise pas autant d'appels vers les fonctions et réduit les valeurs de chaîne dans la sous-requête une fois chacune: xxx


1 commentaires

Après avoir utilisé les conseils de collègues, j'ai pu faire partiellement: