我们可以在存储过程的select into语句中限制小数点后的零吗?

时间:2019-06-11 05:04:06

标签: sql-server

我的AvailableBalance列在输出中显示7个零。如果我创建了一个表并为其指定了数字数据类型,我可以解决此问题,但只是好奇是否可以使用“ SELECT INTO”语句将小数点后的零限制为2位?

CREATE PROCEDURE SP_SMSBRegistration
AS
BEGIN
SELECT
        s.Br, 
        s.Cid, 
        s.MobileNo, 
        s.Acc, 
        s.Status, 
        AvailableBalance = (select dbo.GetAvailBalAmt(acc,0)/100), 
        Cast(b.CurrRunDate As Date) CurrRunDate, 
        Cast(s.ExpiryDate As Date) ExpiryDate,
        sp.SMSBEnabled,
        sp.SMSBRegistrationCharges,
        sp.SMSBRenewalGL

INTO #SMSB_temp
FROM
SMSCIF s
LEFT JOIN
BRPARMS b
ON s.Br = b.Br
CROSS JOIN
SMSParms sp
0.0000000
0.0000000
14909.7000000
0.0000000
0.0000000
0.0000000
103203.4100000
3826.8700000
0.0000000
131222.6000000
198.9900000
0.0000000
4726.7800000

3 个答案:

答案 0 :(得分:0)

您可以在select statement中使用ROUND函数,也可以在创建表格时指定小数点的数量。

例如,通过以下定义:

CREATE TABLE [dbo].[Table1](
    [ID] [int] IDENTITY(1,1) NOT NULL,
    [Dec1] [decimal](18, 0) NULL,
    [Dec2] [decimal](18, 2) NULL,
    [Dec3] [decimal](18, 3) NULL
)

如果您在查询下面运行

insert into Table1 (Dec1, Dec2, Dec3)
values (100.0/3.0, 100.0/3.0, 100.0/3.0)

您将获得以下结果,该结果显示不同的小数点位数

ID  Dec1    Dec2    Dec3
1   33      33.33   33.333

答案 1 :(得分:0)

是的,您可以使用convert()format()函数。

Select convert(decimal(10,0), Yourvalue) 

总位数为10,0为小数点后的数字

或如果使用SQL Server,也可以进行格式化。两者相同,但有人提到格式不是很友好的性能

Select Format(Yourvalue, N'N0') 

答案 2 :(得分:0)

是的,您可以像这样...那样在您的select语句中添加CAST。

DECLARE @myfloat FLOAT
SELECT @myfloat = 2.0/3.0

SELECT @myfloat

SELECT
        Cast(@myfloat As numeric(10,2)) mynum
INTO #SMSB_temp

select * from #SMSB_temp