在SQL Server中删除字符串中的前导零

0 人关注

我已经删除了我的列中的所有前导零,但如果同一列中有一个空格,它就会被'0'所取代,怎么办?例如:批号有000123,0000145,但当这一列有'CO PO'时,它就被填上了0,O/P是 CO0PO

SELECT REPLACE(LTRIM(REPLACE(COMPANYCODE, '0', ' ')), ' ', '0')

在SQL Server 2008 R2中从一个字符串中删除前导零

4 个评论
检查TRIM函数 SELECT TRIM( '. , ! ' FROM ' # test . ') AS Result; docs.microsoft.com/en-us/sql/t-sql/functions/ ...
为什么不直接投到一个数字数据类型,数字没有前导零。或者,更好的是,把你的数字数据存储 一个数字数据类型。
Luuk
@PowerMouse。注意:这与LTRIM不起作用。 当原始字符串为 00001230 时,你想以 1230 结束,我想?
@Luuk , LTRIM/RTRIM只是修剪空格。但这取决于SQL版本,有一个函数TRIM是在SQL2017中引入的。
sql
sql-server
shem
shem
发布于 2022-04-26
2 个回答
Power Mouse
Power Mouse
发布于 2022-04-30
0 人赞同

在2017年,SQL引入了函数TRIM 请查看例子(我不明白你是否需要保留PO/CO)。

DECLARE @x VARCHAR(10) = 'PO 000127'
SELECT
TRIM('0 ' FROM @x) AS Result,
WHEN @x like '%PO%' THEN 'PO ' + TRIM('0 ' FROM SUBSTRING(@x, 3, LEN(@x)))
        WHEN @x like '%CO%' THEN 'CO ' + TRIM('0 ' FROM SUBSTRING(@x, 3, LEN(@x)))
    ELSE TRIM('0 ' FROM @x)
    END AS Result2
WHEN @x like '%PO%' THEN REPLACE(@x, 'PO', '')
        WHEN @x like '%PO%' THEN REPLACE(@x, 'PO', '')
    ELSE RTRIM(LTRIM(@x))
AS BIGINT) AS result
Luuk
select trim('0 ' from '000001230 '); 😢 (输出是 123 ,而不是 1230 )
再说一遍,你有哪个SQL服务器版本?SELECT compatibility_level FROM sys.databases 它应该是140;如果你有SQL 2017+版本,并且兼容级别较低,请与DBA检查是否可以调整:ALTER DATABASE database_name SET COMPATIBILITY_LEVEL = 140
Luuk
SELECT compatibility_level FROM sys.databases 返回150(在我的系统上)。
@Luuk,我明白你的意思了,它也会删除尾部的zerow,在这种情况下,这将是复杂的字符串操作,可能会用到charindex等...我更新了答案。
shem
shem
发布于 2022-04-30
0 人赞同
SELECT
SUBSTRING(COMPANYCODE, 
    PATINDEX('%[^0 ]%', COMPANYCODE + ' '), 
    LEN(COMPANYCODE)