2010-11-07 4 views
0

Lorsque j'essaie de copier les valeurs de TableA vers TableB dans l'environnement SQL 2008, j'essaie de mapper conditionnellement certaines valeurs à un nouveau type et valeur. Par exemple, la TableA a une colonne Lettres varchar (1) et stocke les lettres de l'alphabet, et je veux déplacer ces valeurs vers la TableB dans la colonne Numbers int.SQL pour mapper vers une nouvelle valeur entre deux tables

INSERT INTO TableB(SomeColumn1, Numbers, SomeColumn2) 
SELECT SomeColumn1, 
     LetterToNumber = 
     CASE Letters 
       WHEN 'A' THEN 1 
       ... 
       WHEN 'Z' THEN 26 
     END, 
     SomeColumn2 
FROM TableA 

Est-ce la bonne façon de procéder?

+0

Oui, l'un des bon sens. –

Répondre

2
INSERT INTO TableB(SomeColumn1, Numbers, SomeColumn2) 
SELECT SomeColumn1, 
     ASCII(UPPER(Letters)) - 64, --Uppercase A is 65 decimal, 41 hex 
     SomeColumn2 
FROM TableA 
+0

Je ne suis pas entièrement sûr de ce qui se passe sur cette ligne. – KarlHungus

+0

La correction de gbn à utiliser UPPER au lieu de UCASE est correcte ... pardonnez la faute de frappe. – RichO

0

Qu'ou utiliser un char fonction de conversion de valeur ascii ...

Select SomeColumn1, select ascii(Letters) - 64, SomeColumn2 

Cela suppose que vos lettres sont majuscules. Vous pouvez également faire

Select SomeColumn1, select ascii(ucase(Letters)) - 64, SomeColumn2 

qui convertira les valeurs de minuscules en majuscules avant de générer l'entier ...

+0

Ah, bonnes choses. Merci. – KarlHungus

Questions connexes