所以我正在编写SQL服务器(2008 R2)上的现有存储过程。由于我对SQL的入门级知识,我遇到了一些问题。问题是此生成的报告的要求已更改,并且字段的值已从2更改为3.报告的字段长度已由上一个用户更改,但它们从未考虑过数据中的数据。字段仅等于2个字符。 I.E. 20或03而不是100.这导致报告生成如下值: '03 XX'而不是003XX 这是一个问题,因为接收它的系统从右到左读取它,因此它将看到这些Null值并拒绝整个报告。
我想要做的是将现有的SET语句更改为条件语句,当字段值的长度仅为2个字符时,该条件语句会添加填充“0”。
我现在的目的是:
SET @SupplyQuan = ISNULL((SELECT Unit FROM dbo.Supplyvalue(@UserID)
WHERE Number = 3),'')
我需要的是一个类似于以下内容的声明。我遇到麻烦的一词是“Charactervalue”。我找不到“单元格”或字段值的SQL术语。我当时想的可能是“Columnvalue”,但这似乎不正确。我相信答案是非常基本的,我可能会过度思考这个问题。这是代码。
SET @SupplyQuan = ISNULL((SELECT Unit FROM dbo.Supplyvalue(@UserID)
WHERE Number = 3),'') IF “Charactervalue=3” ELSE IF “Charactervalue=2” THEN
SET @SupplyQuan = ISNULL('0'+(SELECT Unit FROM dbo.Supplyvalue(@UserID)
WHERE Number = 3),'')
答案 0 :(得分:1)
RIGHT('0'+Unit,3)
将Unit
添加'0'
前缀,并返回最右边的3个字符。
SET @SupplyQuan = ISNULL((SELECT RIGHT('0'+Unit,3) FROM dbo.Supplyvalue(@UserID) WHERE Number = 3),'')
答案 1 :(得分:-1)
您可以使用CASE语句和LEN()函数。
SELECT @SupplyQuan = case
when (len(Unit) = 3) then Unit
when (len(Unit) = 2) then '0' + Unit
else ''
END
FROM dbo.Supplyvalue(@UserID)
WHERE Number = 3
但是我会首先检查查询计划,如果由于列名称上的功能而看到太多扫描,我就会将其分解。
declare @x varchar(3)
select @x = Unit FROM dbo.Supplyvalue(@UserID) WHERE Number = 3
select @SupplyQuan = CASE
WHEN (len(@x) = 3) then Unit
WHEN (len(@x) = 2) then '0' + Unit
ELSE ''
end