2010-11-07 68 views
0

在SQL 2008環境中嘗試將TableA的值複製到TableB時,我試圖有條件地將某些值映射到新類型和值。將SQL映射到兩個表之間的新值

例如,TableA具有列字母varchar(1)並存儲字母表中的字母,並且我想將這些值移動到列號爲int的TableB中。

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

這是正確的做法嗎?

+0

是的,正確的方式之一。 – 2010-11-07 20:11:06

回答

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

我不完全確定那條線上發生了什麼。 – KarlHungus 2010-11-07 21:33:17

+0

gbn使用UPPER替代UCASE的更正是正確的......請原諒錯字。 – RichO 2010-11-07 21:49:40

0

無論是或使用一個char ASCII值轉換功能...

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

這假定你的信是全部大寫。你也可以做

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

這將產生整數之前小寫值轉換爲大寫...

+0

啊,好東西。謝謝。 – KarlHungus 2010-11-07 21:32:14