LTRIM使用SQL在整列中结束值



我有一个表,它有一个名为"ProjectCode"的列,该列中的所有值都设置为:123.21.000。我想写一些东西来遍历整列,并从所有条目中删除结尾.000。这是我尝试过的许多事情的一个例子。

select ltrim("Project Code", '.000') 
from "Project Code"

有几种方法可以做到这一点,但由于我们对您的数据了解不够,我们只能猜测

以下是的一些可能性

declare @t table (ProjectCode varchar(50))
insert into @t values ('123.21.000'), ('000123.21.000')
select ProjectCode,
-- just remove the last 3 chars, whatever they are
left(ProjectCode, len(ProjectCode) - 3) as [3 last removed],

-- another way of removing the last 3 chars
substring(ProjectCode, 1, len(ProjectCode) - 3) as [3 last removed substr],

-- remove all '0' chars, both left and right from the value
trim('0' from ProjectCode) as [trim all zeros],            

-- replace any occurence of '000' by ''
replace(ProjectCode, '000', '') as [replace 000]             
from @t

这将返回

修剪所有零
项目代码3个最后删除的子字符串替换000
123.21.000123.21。123.21
000123.21.000000123.21.123.21.123.21。

如果您使用的是完全支持的SQL Server版本,则可以使用TRIM:

SELECT TRIM('0.' FROM ProjectCode) AS ProjectCode
FROM dbo.YourTable;

假设ProjectCode没有前导0.(即'00.123.000''0123.456.1'(。

您可以使用PARSENAME函数来获取字符串中的前两个值:

DECLARE @Str VARCHAR(100) = '123.21.000'; 
SELECT CONCAT(PARSENAME(@Str , 3) , '.', PARSENAME(@Str , 2))
Result:   123.21

您的查询如下所示:

SELECT CONCAT(PARSENAME("Project Code" , 3) , '.', PARSENAME("Project Code" , 2))
FROM "Project Code"

但如果你有可变数的'.',并且你只想去掉最后一个。以及之后的任何值,则可以使用以下查询:

DECLARE @t TABLE(Col VARCHAR(100) )
INSERT INTO @t (Col)
VALUES ('123.21.000') , ('123.21.01.000'), ('123.00.011.0111.0000'), ('123'); 

SELECT REVERSE(SUBSTRING(REVERSE(Col) , CHARINDEX('.', REVERSE(Col)) + 1 , LEN(Col)))
FROM @t
Result: 
123.21
123.21.01
123.00.011.0111
123

最新更新