Opération de mise à jour avec sous-string dans MSSQL

J'ai la table ci-dessous dans mon MSSQL.

itemNo itemDesc ComponentType Voltage 100001LF CAP CER 10n 25V 20% 0805 CAPACITOR NULL 100002LF CAP CER 10n 50V 20% 1206 CAPACITOR NULL 100008LF CAP CER 100n 25V 20% 0805 CAPACITOR NULL 100012LF CAP CERAM 1n 25V 20% 0805 CAPACITOR NULL 100013LF CAP CER 100n 25V 20% 0805 CAPACITOR NULL 

Maintenant, comment déterminer la tension de itemDesc et le mettre dans la tension?

Remarque: La tension peut être déterminée comme suit: Recherchez la lettre V , prenez tous les caractères avant de voir un espace.

Ma première tentative est la suivante: [Mais, n'a pas fonctionné :(]

 UPDATE dbo.capacitor SET [Voltage] = CASE WHEN CHARINDEX('% ', ItemDesc) > 0 THEN SUBSTRING(itemDesc, CHARINDEX['V ', ItemDesc], CHARINDEX['V ',ItemDesc]+2) ELSE null END 

(J'utilise C # pour le encoding, mais je souhaite que cette opération puisse être effectuée dans SQL Server lui-même au lieu d'utiliser C # pour prendre chaque logging, le traiter et le remettre).

 UPDATE dbo.capacitor SET [Voltage] = CASE WHEN CHARINDEX('% ', itemDesc) > 0 THEN SUBSTRING(itemDesc, CHARINDEX('n', itemDesc) + 1, CHARINDEX('V ',itemDesc) - (CHARINDEX('n', itemDesc) + 1)) ELSE null END END 

Je suppose que ce serait beaucoup plus facile en C # mais voici une solution qui fonctionnera en SQL. Il inverse la corde et cherche V après un espace et prend tout jusqu'à l'espace suivant et le renverse ensuite.

 declare @desc as varchar(100) = 'CAP CER 10n 25V 20% 0805' select REVERSE(SUBSTRING(REVERSE(@desc), charindex(' V', REVERSE(@desc)) + 2, CHARINDEX(' ', REVERSE(@desc), charindex(' V', REVERSE(@desc)) + 1) - charindex(' V', REVERSE(@desc)) - 2))