首页 > 解决方案 > SQL Server:在没有 CHARINDEX 的情况下提取中间字符

问题描述

首先,我CHARINDEX在这里看到了结果,但它们似乎都不适用于我的情况。原因要么是a,CHARINDEX不能帮助我,要么是b,我不明白它是如何CHARINDEX工作的。话虽这么说,我想在这里问我的问题,希望我能就如何解决我的问题以及CHARINDEX如果这恰好是这个问题的回答方式得到一些澄清。

我试图从中提取的变量具有不同的长度。然而,有两件事总是不变的。

  1. 字符串中的第 16 个字符总是有一个“/”
  2. 字符串中的最后一个字符始终为“0”或“1”

我要做的是从“/”和“0”或“1”之间提取名称。简而言之,我想砍掉每个字符串的前 16 个字符和最后一个字符。到目前为止,这就是我所拥有的:

SELECT 
    SUBSTRING([string_name], 17, LEN([string_name]) - 1) AS 'username'
FROM
    [table_name]

我得到的结果最后仍然包含 0 OR 1 。我需要做的是以某种方式从字符串中删除该 0 。需要注意的是,“/”和“0”之间的字符数总是不同的。

当前结果:

gordon0
grant0
greg0
guy1
hanying0

期望的结果:

gordon
grant
greg
guy
hanying

这里的任何建议都会很棒。

如果您需要我提供任何其他信息,请告诉我。如果可能,希望保持使用SUBSTRING,LEFTRIGHT.

谢谢

标签: sqlsql-server

解决方案


调整长度似乎可以解决您的问题:

SELECT SUBSTRING([string_name], 17, LEN([string_name])-17) AS username
FROM [table_name]

推荐阅读