【问题标题】:Find string length in sql without starting of zero [duplicate]在sql中查找字符串长度而不从零开始[重复]
【发布时间】:2015-05-15 10:35:11
【问题描述】:

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

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

我已尝试以下查询

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


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

【问题讨论】:

  • mysql sql 服务器。你用哪一个?
  • LTRIM() 删除两边(开始和结束)的零,但我需要删除唯一开始的 0。

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


【解决方案1】:

如果不需要空格,那么您所需要的接近就是您所需要的:

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

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

即用空格替换所有0s,然后(LTRIM)删除所有前导空格,然后用0s替换所有空格(所以,所有原始@987654325不处于领先位置的@s 被还原)

结果:

MJ300

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

【讨论】:

    【解决方案2】:

    PATINDEX 的解决方案:

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

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

    【讨论】:

      【解决方案3】:
      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))
      

      【讨论】:

      • 谢谢,但是上面的(Damien 写的)速度很快
      • 我知道,我只是在做一些更笼统的事情
      猜你喜欢
      • 2016-08-11
      • 2012-08-07
      • 2023-03-31
      • 1970-01-01
      • 2018-10-18
      • 2015-04-24
      • 2014-11-13
      • 1970-01-01
      • 2019-12-21
      相关资源
      最近更新 更多