Sql Server如何Trim掉指定的字符,如'0'

山的那边还是山~ 2008-10-22 01:11:24
RT
...全文
2962 19 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
19 条回复
切换为时间正序
请发表友善的回复…
发表回复
yanzisoftware 2012-01-23
  • 打赏
  • 举报
回复
#18楼 这种做法有点意思。
hake303 2010-02-26
  • 打赏
  • 举报
回复
先将0转空格,再去掉右边空格,再将里面的空格转0,如下:
replace(rtrim(replace('10500000','0',' ')),' ','0')
得到的结果就是105了
smilef9453 2009-08-21
  • 打赏
  • 举报
回复
7楼的档案是正解,楼主要自己学会分析,不要照搬代码。
sql2005函数代码如下:
USE [jjXinHe]
GO

SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO

CREATE FUNCTION [dbo].[trimChar]
(
@char VARCHAR(5),
@str nVARCHAR(max)
)
RETURNS nvarchar(max)
AS
BEGIN
if(len(@str)=0) RETURN @str;


RETURN(SELECT STUFF
(REVERSE(
STUFF(REVERSE(@str),1,
PATINDEX('%[^'+@char+']%',REVERSE(@str))-1,'')
)
,1,PATINDEX('%[^'+@char+']%',@str)-1,'')

);

END
zperson 2008-10-22
  • 打赏
  • 举报
回复
replace(@str,'0','')
  • 打赏
  • 举报
回复
谢谢,谢谢!
rockyvan 2008-10-22
  • 打赏
  • 举报
回复
--循环判断最后一位是否为 0,是则删除掉,直到不为 0 。
DECLARE @BB NVARCHAR(20)
SET @BB = '4501000'

DECLARE @i INT,@CC NVARCHAR(20)
SET @i = LEN(@BB)
SET @CC = @BB

WHILE SUBSTRING(@CC,@i,1) = '0'
BEGIN
SET @CC = SUBSTRING(@CC,1,@i-1)
SET @i = @i-1
CONTINUE
END

SELECT @CC
/*
--------------------
4501

(1 個資料列受到影響)*/
rockyvan 2008-10-22
  • 打赏
  • 举报
回复
--循环判断最后一位是否为 0,是则删除掉,直到不为 0 。
DECLARE @AA NVARCHAR(20)
SET @AA = '45002500'

DECLARE @i INT,@CC NVARCHAR(20)
SET @i = LEN(@AA)
SET @CC = @AA

WHILE SUBSTRING(@CC,@i,1) = '0'
BEGIN
SET @CC = SUBSTRING(@CC,1,@i-1)
SET @i = @i-1
CONTINUE
END

SELECT @CC
/*
--------------------
450025

(1 個資料列受到影響)*/

rockyvan 2008-10-22
  • 打赏
  • 举报
回复
--循环判断最后一位是否为 0,是则删除掉,直到不为 0 。
DECLARE @AA NVARCHAR(20),@BB NVARCHAR(20)
SET @AA = '45002500'
SET @BB = '4501000'

DECLARE @i INT,@CC NVARCHAR(20)
SET @i = LEN(@AA)
SET @CC = @AA
--SET @i = LEN(@BB)
--SET @CC = @BB

WHILE SUBSTRING(@CC,@i,1) = '0'
BEGIN
SET @CC = SUBSTRING(@CC,1,@i-1)
SET @i = @i-1
CONTINUE
END

PRINT @CC
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 rockyvan 的回复:]
引用 5 楼 cftxlin 的回复:
用replace不行的,这样的话,把其他地方的'0',也给去掉了。需要的是把未尾 的'0'去掉。

建议给点测试数据,免得大家猜来猜去。
[/Quote]

比如,'45002500','4501000'

现在要求不要最后的'0',而且这个'0'的个数是不确定的在一个到三个之间。
rockyvan 2008-10-22
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 cftxlin 的回复:]
用replace不行的,这样的话,把其他地方的'0',也给去掉了。需要的是把未尾 的'0'去掉。
[/Quote]
建议给点测试数据,免得大家猜来猜去。
liangCK 2008-10-22
  • 打赏
  • 举报
回复
sorry..7楼那个不行.
幸运的意外 2008-10-22
  • 打赏
  • 举报
回复
对不起,忘了一个参数
用replace函数吧,格式如下:
replace(检索字符串,替换原字符,目标字符)
例:replace('0 haohaoxuexi','0 ','') 结果为'haohaoxuexi'
liangCK 2008-10-22
  • 打赏
  • 举报
回复
CREATE FUNCTION dbo.trimChar(@char VARCHAR(5),@str VARCHAR(50))
RETURNS VARCHAR(50)
AS
BEGIN
RETURN(SELECT STUFF
(REVERSE(
STUFF(REVERSE(@str),1,
PATINDEX('%[^'+@char+']%',REVERSE(@str))-1,'')
)
,1,PATINDEX('%[^'+@char+']%',@str)-1,'')

);
END
GO

DECLARE
@str VARCHAR(20);

SET @str='0012agd02002d400';

SELECT dbo.trimChar('0',@str);

DROP FUNCTION dbo.trimChar



/*
--------------------------------------------------
12agd02002d4

(1 行受影响)

*/
幸运的意外 2008-10-22
  • 打赏
  • 举报
回复
用replace函数吧,格式如下:
replace(检索字符串,替换字符)
例:replace('0 haohaoxuexi','0 ') 结果为'haohaoxuexi'
  • 打赏
  • 举报
回复
用replace不行的,这样的话,把其他地方的'0',也给去掉了。需要的是把未尾 的'0'去掉。
fcuandy 2008-10-22
  • 打赏
  • 举报
回复
replace
水族杰纶 2008-10-22
  • 打赏
  • 举报
回复
replace(col,'0','')
林虎 2008-10-22
  • 打赏
  • 举报
回复
replace
-狙击手- 2008-10-22
  • 打赏
  • 举报
回复
replace(@s,'0','')

27,581

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 应用实例
社区管理员
  • 应用实例社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧