Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/sql-server-2008/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server 2008 SQL映射到两个表之间的新值_Sql Server 2008_Case - Fatal编程技术网

Sql server 2008 SQL映射到两个表之间的新值

Sql server 2008 SQL映射到两个表之间的新值,sql-server-2008,case,Sql Server 2008,Case,在SQL 2008环境中尝试将TableA的值复制到TableB时,我尝试有条件地将一些值映射到新的类型和值 例如,TableA具有列字母varchar(1)并存储字母表中的字母,我想将这些值移动到列数字int中的TableB INSERT INTO TableB( SomeColumn1, Numbers, SomeColumn2 ) SELECT SomeColumn1, LetterToNumber = CASE Letters

在SQL 2008环境中尝试将TableA的值复制到TableB时,我尝试有条件地将一些值映射到新的类型和值

例如,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

这是正确的方法吗?

或者使用字符到ascii值转换函数

Select SomeColumn1, select ascii(Letters) - 64, SomeColumn2
假设你的信都是大写的。你也可以

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

这将在生成整数之前将小写值转换为大写

我不完全确定这条线上发生了什么。gbn使用UPPER而不是UCASE的更正是正确的。。。请原谅我的打字错误。
INSERT INTO TableB( SomeColumn1, Numbers, SomeColumn2 )
SELECT SomeColumn1, 
       ASCII(UPPER(Letters)) - 64, --Uppercase A is 65 decimal, 41 hex
       SomeColumn2
FROM TableA