2011-08-22 37 views
0

我的印象是,SQL Server将允许我执行另外如很简单列相加

SELECT  val01, val02, val03 = (val01 + val02) 
FROM  Table_1 

使val03是另外两个以前的专栏。然而,在这种情况下,我实际上看到值2旁边的值为1。你能告诉我我要去哪里错了吗?

+1

WWhat是val01的和val02的数据类型?我猜字符或类似? – Jacob

+1

什么数据类型是val01和val02? – jli

+0

辉煌!,错误的数据类型。谢谢 – giles

回答

3

+运营商在SQL Server中两个用途:

  • 对于intbigintdecimal等),它是一个加成运营商。
  • 对于varcharnvarcharchar等)它是一个级联运算符。

如果您在字符串数据类型字段中有数字数据,您将看到第二个值附加到第一个值。

的解决方案是:

  • 使用正确的数据类型。如果它是一个数字,数据类型应该是数字的。
  • 转换为正确的数据类型 - 即val03 = (CAST(val01 as int) + CAST(val02 as INT))
1

因此,val03是结果列表中val01和val02的串联?例如:

VAL01 VAL02 VAL03 
    1  2 1 2 
    4  5 4 5 

在这种情况下,Val01或Val02是非数字列,或者两者都有。投它们:

SELECT val01, val02, val03 = (cast(val01 as float) + cast(val02 as float)) FROM Table_1 

或者,也可以修复列类型。

0

如果您val01和val02列字符或varchar,但包含数字,数字要在上面的语法来串联。

如果您希望它们显示为数字,则需要在val01或val02字段上使用CAST或CONVERT以将它们添加为数字值。

实施例:

SELECT val01,val02,val03 FROM TABLE_1 WHERE CAST(val03作为INT)=((CAST val01作为INT)+(CAST val02作为INT))