我有一个表,它有一个名为"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.000 | 123.21。 | 123.21 | |
000123.21.000 | 000123.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