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
* /
答案 0 :(得分:2)
为什么不直接创建变量ints并为它们分配1和-1?
答案 1 :(得分:2)
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,并且它们会返回。