在sql中查找字符串长度而不是从零开始

时间:2015-05-15 10:35:12

标签: sql-server sql-server-2008 csv

我遇到问题,我正在从excel(.csv)文件上传员工代码和帐号,我将检查员工代码并更新或插入相应员工代码的帐号。但如果员工代码以" 0"开头。 csv文件不会考虑0和只发送剩余的字符,所以当我在sql中检查时它与表数据(Employee Code)不匹配。

我有计划与他们匹配,但我不知道该怎么做。

我试过了以下查询

declare @EmployeeCodeNET varchar(max)='MJ300'; 
declare @EmployeeCodeDB varchar(max)='00MJ300';


select LTRIM(REPLACE(@EmployeeCodeDB, '0', ''))--It should return 'MJ300'

3 个答案:

答案 0 :(得分:5)

如果不期望空格,那么关闭到您尝试的内容就是您所需要的:

declare @EmployeeCodeDB varchar(max)='00MJ300';

select REPLACE(LTRIM(REPLACE(@EmployeeCodeDB, '0', ' ')),' ','0')

即,将所有0替换为空格,然后(LTRIM)删除所有前导空格,然后将所有空格替换为0 s(因此,所有未处于领先位置的原始0都将被还原)

结果:

MJ300

如果你的字符串中可能存在空格并且它们不是必需的,但它们不应该神奇地变成0,那么你可以用另一个替换内部@EmployeeCodeDB替换:{{ 1}}

答案 1 :(得分:3)

PATINDEX的解决方案:

declare @str varchar(max)=' 00MJ300';
SELECT SUBSTRING(@str, PATINDEX('%[^0 ]%', @str), LEN(@str))

它会找到第一个不是0或空格的符号,并从该位置开始直到结束。

答案 2 :(得分:2)

declare @EmployeeCodeNET varchar(max)='MJ300'; 
declare @EmployeeCodeDB varchar(max)='00MJ300';
DECLARE @offset int

SELECT @offset = LEN(@EmployeeCodeDB) - LEN(@EmployeeCodeNET)
SELECT SUBSTRING(@EmployeeCodeDB, @offset+1, LEN(@EmployeeCodeNET))