Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/72.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/27.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 即使在使用适当的函数后也不会删除尾随空格_Sql_Sql Server_Stored Procedures - Fatal编程技术网

Sql 即使在使用适当的函数后也不会删除尾随空格

Sql 即使在使用适当的函数后也不会删除尾随空格,sql,sql-server,stored-procedures,Sql,Sql Server,Stored Procedures,我只是想从字符串变量中删除尾随空格。 下面是示例代码: Set @Tree_ID='1.23 ' Set @Tree_ID = LTRIM(RTRIM(@Tree_ID)) 但令我惊讶的是,领先空间并没有被移除。我单独做了同样的事情,效果很好。但不知何故,它并没有在我的存储过程中修剪空间 下面是我的存储过程 ALTER procedure [dbo].[SP_Web_Calculate_Interest] -- 23,1,'2014-04-01','2015-03-19','','

我只是想从字符串变量中删除尾随空格。 下面是示例代码:

Set @Tree_ID='1.23     '

Set @Tree_ID = LTRIM(RTRIM(@Tree_ID))
但令我惊讶的是,领先空间并没有被移除。我单独做了同样的事情,效果很好。但不知何故,它并没有在我的存储过程中修剪空间

下面是我的存储过程

 ALTER procedure [dbo].[SP_Web_Calculate_Interest] -- 23,1,'2014-04-01','2015-03-19','','kiran.divate','COMP7',1

@FGRPNo int,
@Company_No int,

@From_Date datetime,
@To_Date datetime,
@CC_TID varchar(200),
@UserName varChar(100),
@HostName varChar(100),
@DispMode int=1

 As
 Begin
 Declare @Tree_ID char(30)
 Declare @TempTable Table(Group_No smallint,Company_No smallint,Group_Name    char(50),Tree_ID varchar(30),Is_Fixed char(1))

 If @FGRPNo > 0
 Begin
    if @DispMode =1
     Begin
       Insert into @TempTable(Group_No ,Company_No,Group_Name ,Tree_ID ,Is_Fixed ) 
        select distinct g.Group_No,g.Company_No, g.group_name,g.Tree_ID,g.Is_Fixed
          from account_group  G  inner join Account a 
        on a.Tree_ID like '%.' + ltrim(rtrim(CAST(g.Group_No as varchar(10))))  + '.%' 
            where (a.company_no=@Company_No  and a.account_no 
           in (  select Account_No 
          from Interest_Percent 
            where Company_No=@Company_No and Int_Rate >0 and effective_Date  between @From_Date and @To_Date) 

            and g.group_no=@FGRPNo


          and (g.company_no = 0 or g.company_no=@Company_No))

           order by g.group_no
    End
   Else
  Begin
                Insert into @TempTable(Group_No ,Company_No,Group_Name   ,Tree_ID ,Is_Fixed ) 
          select distinct g.Group_No,g.Company_No,    g.group_name,g.Tree_ID,g.Is_Fixed
           from account_group  G  inner join Account a 
            on a.Tree_ID like '%.' + ltrim(rtrim(CAST(g.Group_No as varchar(10))))  + '.%' 
            where (a.company_no=@Company_No  and a.account_no 
           in (  select Account_No 
          from Interest_Percent 
           where Company_No=@Company_No and Int_Rate >0 and effective_Date between @From_Date and @To_Date) 

               and g.Parent_group_no= @FGRPNo


           and (g.company_no = 0 or g.company_no=@Company_No))

             order by g.group_no

      End

  End
 Else
  Begin
             Insert into @TempTable(Group_No ,Company_No,Group_Name ,Tree_ID  ,Is_Fixed ) 
         select distinct g.Group_No,g.Company_No,  g.group_name,g.Tree_ID,g.Is_Fixed
            from account_group  G  inner join Account a 
             on a.Tree_ID like '%.' + ltrim(rtrim(CAST(g.Group_No as varchar(10))))  + '.%' 
             where (a.company_no=@Company_No  and a.account_no 
           in (  select Account_No 
         from Interest_Percent 
          where Company_No=@Company_No and Int_Rate >0 and effective_Date between @From_Date and @To_Date) 




       and (g.company_no = 0 or g.company_no=@Company_No))

       order by g.group_no
  End

 Declare @CompNo int

 Declare cur_temp SCROLL CURSOR FOR 

   Select Group_No ,Tree_ID,Company_No  from @TempTable 

 FOR READ ONLY

OPEN cur_temp 
FETCH first FROM cur_temp into @FGRPNo ,@Tree_ID,@CompNo
WHILE (@@fetch_status <> -1)
     Begin
     if @CompNo =0 
        Begin
         Set @Tree_ID = Convert(varchar(10),@Company_No) + '.' + @Tree_ID  
        end
        Set @Tree_ID = REPLACE(@Tree_ID, ' ', '')

        Exec SP_Calculate_Interest @FGRPNo,@Company_No,@Tree_ID,@From_Date,@To_Date,@CC_TID,@UserName,@HostName 
End

  Close cur_Temp

deallocate cur_Temp

--Exec SP_Web_GetAccountInterest @FGRPNo,@Tree_ID ,@UserName ,@HostName ,@Company_no  ,'G',@CC_TID ,@BalanceAmount output  ,@InterestAmount output  
--Select @BalanceAmount 
--Select @InterestAmount

if @DispMode >1
Begin
  Declare @TempTable2 Table(Account_No int,Account_Name char(50),Tree_ID char(30),parent_group_no smallint)

  Insert into @TempTable2(Account_No ,Account_Name,Tree_ID ,parent_group_no ) 
  select Distinct A.Account_No, A.Account_Name, A.Tree_ID, A.parent_group_no 
    from account A  Where A.parent_group_no = @FGRPNo  and A.company_no=@Company_No and a.account_no 
            in (select Account_No from Interest_Percent
             where Company_No=@Company_No  and Int_Rate >0 
             and effective_Date between @From_Date and @To_Date) order by A.Account_No

    Declare @Acc_No int 
    Declare cur_temp2 SCROLL CURSOR FOR 

    Select Account_No ,Tree_ID  from @TempTable2 

    FOR READ ONLY

        OPEN cur_temp2 
        FETCH first FROM cur_temp2 into @Acc_No ,@Tree_ID
        WHILE (@@fetch_status <> -1)
             Begin

                Set @Tree_ID = REPLACE(@Tree_ID, ' ', '')
                    Exec SP_Calculate_Interest @Acc_No,@Company_No,@Tree_ID,@From_Date,@To_Date,@CC_TID,@UserName,@HostName 
                End

        Close cur_Temp2

        deallocate cur_Temp2

End


End
Set@Tree\u ID=Convert(varchar(10),@Company\u No)+.+@Tree\u ID
的@Tree\u ID的值是1.23,后面有空格,所以当我执行
Set@Tree\u ID=REPLACE(@Tree\u ID,,'')时,它不应该在if语句结束后立即删除空格吗
但当我在调试器中添加watch时,它仍然是一样的

您可以使用

尝试使用以下方法:

LTRIM(RTRIM(REPLACE(REPLACE(REPLACE(@Tree_ID, CHAR(10), ''), CHAR(13), ''), CHAR(9), '')))
结果:
| 1.23 |

它工作得很好,但作为一个建议。小心制表符空格或输入空格(例如,当文本取自备忘录时)

请参阅带有选项卡空间的此ex:

declare @Tree_ID varchar(100)
Set @Tree_ID='1.23      '

Set @Tree_ID = LTRIM(RTRIM(@Tree_ID))

print '|'+@Tree_ID+'|'

并应用于您的存储过程…可能工作正常编辑:问题是@Tree\u ID使用的是数据类型CHAR(30)


CHAR始终填充足够的空间以使用其完整长度。如果不需要尾随空格,则需要使用VARCHAR。

@Tree\u ID
字符(30)
。因此,无论如何修剪或替换空格,始终为30个字符


你可以试试varchar<代码>声明@Tree\u ID varchar(30)

我替换了以下代码:

 Declare @Tree_ID char(30)
与:

 Declare @Tree_ID varchar(30)

这对我来说很好。因此,这意味着无论是
LTRIM
RTRIM
还是
Replace
函数都没有问题,这些函数在静态分配(
char
)上都不起作用,当我将其更改为
varchar
时,它工作得很好,我当然可以,但我正在思考我的代码为什么不起作用!由于一些隐藏的原因,这也不起作用,我也知道它应该起作用。你能提供正确打印的单词以及错误的单词吗?现在检查我的SP,好吧,很明显@TreeID没有修剪properly@ubaidashrafmasoody检查我的最新答案,告诉我这是否适合你。正如我所说,当我尝试这样做时,它对我来说也很好,但不知何故,SP中的相同代码不起作用!这也是同样的代码块。请发布SP代码,很可能问题不在这部分代码中。您使用的是哪个版本的SqlServer?在SQLServer2008R2中,您的代码运行正常。代码没有问题。错误可能在于您对结果的分析。@TabAlleman我调试了代码,我正确地接收到了值,但在使用替换或修剪函数后,值仍然保持不变!!除了你,它对其他人都有效,所以要么你的SQL server副本有缺陷,要么你做错了什么,但我们无法从你的肩膀看出它是什么。是的,当我单独使用它时,它对我有效,但我不明白为什么它不起作用。现在不幸的是,我没有办法确切地告诉你我是什么
declare @Tree_ID varchar(100)
Set @Tree_ID='1.23      '

Set @Tree_ID = LTRIM(RTRIM(@Tree_ID))

print '|'+@Tree_ID+'|'
    CREATE FUNCTION RemovewhiteSpaces
    (
        @InputStr varchar(8000)
    )
    RETURNS varchar(8000)
    AS
    BEGIN
    declare @ResultStr varchar(8000)
    set @ResultStr = @InputStr
    while charindex(' ', @ResultStr) > 0
        set @ResultStr = replace(@InputStr, ' ', '')

    return @ResultStr
    END

select dbo.RemoveAllSpaces('1.23    1 ')

RESULT 
1.231
 Declare @Tree_ID char(30)
 Declare @Tree_ID varchar(30)