签名变量 - T / SQL

时间:2014-01-24 19:02:25

标签: sql sql-server

DECLARE @Plus varchar(1) = '+'
        ,@Minus varchar(1) = '-'

- 我的尝试

SELECT 5 + (@Plus*2) AS [Should_be_7], 5 + (@Minus*2) AS [Should_be_3], 5 - (@Plus*2) AS [Should_be_3], 5 - (@Minus*2) AS [Should_be_7]

/ * 我的输出

Should_be_7 Should_be_3 Should_be_3 Should_be_7
5           5           5           5

我的目标:使用变量中的符号并进行计算。 (我知道我正在尝试在我的数学中使用带有int的字符,同时期望int中的输出,并且在最基本的数学级别上是NO-NO ...查询只是为了向您展示我想要做的事情)。 只要我可以对该数据类型执行CAST / CONVERT +/-,我就可以使用INT的替代数据类型。

预期产出:

Should_be_7 Should_be_3 Should_be_3 Should_be_7
7           3           3           3

* /

更新(有点不同的Q ......很抱歉):

可以有一个SINGLE变量,它可以在任何时候都是+或_而我需要使用该变量来获得预期输出......这可能吗?

DECLARE @Sign varchar(1) = '+' -- or can be '-"

- 我的尝试

- 当标志'+'时     SELECT 5 +(@ Sign * 2)AS [Should_be_7],5 - (@ Sign * 2)AS [Should_be_7] - 什么时候签名' - '     SELECT 5 +(@ Sign * 2)AS [Should_be_3],5 - (@ Sign * 2)AS [Should_be_3]

/ * 预期产量: - 当标志是'+'时

Should_be_7 Should_be_7
7           3

- 当标志是' - '

Should_be_3 Should_be_3
3           7

* /

4 个答案:

答案 0 :(得分:2)

为什么不直接创建变量ints并为它们分配1和-1?

答案 1 :(得分:2)

SQL Fiddle

MS SQL Server 2008架构设置

查询1

DECLARE @Plus int = 1
 ,@Minus int = -1
SELECT 5 + (@Plus*2) AS [Should_be_7], 
5 + (@Minus*2) AS [Should_be_3], 
5 - (@Plus*2) AS [Should_be_3_2], 
5 - (@Minus*2) AS [Should_be_7_2]

<强> Results

| SHOULD_BE_7 | SHOULD_BE_3 | SHOULD_BE_3_2 | SHOULD_BE_7_2 |
|-------------|-------------|---------------|---------------|
|           7 |           3 |             3 |             7 |

答案 2 :(得分:1)

怎么样:

cast((@Plus + '1') as int)
cast((@Minus + '1') as int)

应该很容易以编程方式处理您的代码。

答案 3 :(得分:1)

SQL Server将字符串转换为算术上下文中的数字。所以,

select '-1' - 2, '+1' + 2;

分别产生-3和3的预期值。

您观察到的变量是'-''+'变为0。这是非常合理的行为。在SQL Server 2008和2012中的SQL Fiddle上,所有4个表达式都应该返回5,并且它们会返回。