2010-11-07 63 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