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))