Sql 如何在存储过程中VARCHAR类型的输出变量出现零值条件时显示字符串
我正在用SQL Server编写一个存储过程 我必须通过我已经创建的临时表Sql 如何在存储过程中VARCHAR类型的输出变量出现零值条件时显示字符串,sql,sql-server,Sql,Sql Server,我正在用SQL Server编写一个存储过程 我必须通过我已经创建的临时表#SweepActivityTransactions INSERT INTO #SweepActivityTransactions (Difference) SELECT TOP 100 CASE WHEN (CAT.RequestedAmount - CAT.ConfirmedAmount) = 0 THEN @DIFFERENCEDECIMAL
#SweepActivityTransactions
INSERT INTO #SweepActivityTransactions (Difference)
SELECT TOP 100
CASE
WHEN (CAT.RequestedAmount - CAT.ConfirmedAmount) = 0
THEN @DIFFERENCEDECIMAL
ELSE (CAT.RequestedAmount - CAT.ConfirmedAmount)
END AS 'Difference'
FROM
CustomerAccount_Transaction CAT WITH (NOLOCK)
WHERE
EntryDate = @BusinessDate
AND CAT.TransactionExceptionType_FK = 0
END
根据上述条件,我必须在屏幕上显示一个连字符(-),以防差值为零,否则为差值
由于字段差异的类型为varchar(18,2)
,因此我无法直接显示连字符(因为它是varchar
类型)
我想用这个
SET @DIFFERENCEVARCHAR = '-'
SET @DIFFERENCEDECIMAL = (SELECT CAST(@DIFFERENCEVARCHAR AS decimal(18,2)) )
但即使这样也不起作用。如果CAT.RequestedAmount-CAT.ConfirmedAmount
为零,是否有人能建议一种在屏幕上显示的方法
更新-样本数据-
如果((CAT.RequestedAmount-CAT.ConfirmedAmount)=0,则显示-
否则显示差异
SCREEN
Difference
-
$3.45
$6.77
-
-
$2.33
您必须输出一个varchar:
CASE
WHEN (CAT.RequestedAmount - CAT.ConfirmedAmount) = 0
THEN @DIFFERENCEVARCHAR
ELSE '$'+CAST((CAT.RequestedAmount - CAT.ConfirmedAmount) AS varchar(31))
END AS 'Difference'
SQL Server中没有
varchar(18,2)
数据类型-varchar
只有一个长度(比如varchar(18)
)-但没有像decimal(18,2)
那样的“精度”我认为这是一种类型,OP的意思是decimal(18,2)
。但是,问题仍然很不清楚。示例数据和所需的输出将很有帮助。您不能将“-”转换为十进制,但可以将十进制转换为varchar。但在正常情况下,如果值大于0,则输出需要采用此格式$2.55。varchar将不会使用$signIt进行格式化。无法完成。“-”可以不能以数值形式输出。并且输出列不能为“this为十进制,this为varchar,this为varchar”。必须为该列确定一种数据类型。不能将值NULL插入列'Difference',表'tempdb.dbo.#SweepActivityTransactions