【问题标题】:Extract string from the first position that's not "0" SQL从不是“0”SQL的第一个位置提取字符串
【发布时间】:2019-12-03 19:26:00
【问题描述】:

我试图在字符串中找到非“0”值的第一个位置,以便提取后面的值。字符串的长度都是 10。字符串都以 D 开头,然后是可变数量的“0”,我需要找到字符串中不是“0”的第一个位置。例子:

String      Need to extract
D009902167, 9902167
D000128677, 128677
D000004395, 4395

我最初想这样做:

Mid(Stringname,InStr(2,Stringname, <>"0"))

但我现在读到 InStr 不接受 ,!或不。如何从值不是“0”的第一个位置提取字符串?

【问题讨论】:

    标签: sql ms-access


    【解决方案1】:

    使用MID() 删除第一个字符,然后添加0 以仅获得数字结果(Access 将隐式转换为整数):

    SELECT MID(Stringname, 2) + 0
    FROM tablename
    

    【讨论】:

      【解决方案2】:

      似乎你需要字符串 whitout left "D" 的 val 为此,您可以将 D 替换为空字符串并获取 val()

           val(Replace(Stringname, "D", "") ) 
      

      【讨论】:

        【解决方案3】:

        这在 SQL 中不是一件容易的事,但我的方法是:

        1. 去掉零
        2. 找到您要查找的角色
        3. 在字符串中搜索没有去掉字符的那个字符

        全部加在一起,看起来像这样:

        Mid(
            Stringname,
            InStr(
                2,
                Stringname,
                Left(   
                    Replace(
                        Stringname,
                        "0",
                        ""
                    ), 
                    2
                )
            )
        )
        

        如果您的字符串只包含数字,您可以使用Format 去除前导零而不进行强制转换:

        Format(Mid(StringName, 2))
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2012-03-24
          • 2014-04-24
          • 1970-01-01
          • 2015-05-08
          • 1970-01-01
          • 1970-01-01
          • 2014-03-07
          • 2014-06-12
          相关资源
          最近更新 更多