【问题标题】:how to return a substring of a fixed length out of a string?如何从字符串中返回固定长度的子字符串?
【发布时间】:2017-05-12 08:00:35
【问题描述】:

我有一个名为 Remarks 的字段,如下所示:

    My voter card number is ABC123456789
    VOter card ID is vbv147258369
    bnl478512369

我只想从该字段的所有行中获取给定长度的子字符串。对于上面的输入,子串长度为12,输出应该是

ABC123456789
vbv147258369
bnl478512369

注意子串的长度是固定的,即12

【问题讨论】:

  • 你的编程语言是什么
  • 'ABC123456789' 大小为 12?是你想要的正确输出吗
  • 您使用的是哪个 dbms? (您已经得到了一个特定于产品的答案...)
  • 我已编辑代码以将子字符串声明为长度 12 而不是 10,与 @Mr. 一致。博萨勒的评论。我也试图澄清这个问题。请验证它是否与您的意图一致。

标签: sql substring


【解决方案1】:

试一试:

DECLARE @CONTENT TABLE(REMARK VARCHAR(MAX))
INSERT INTO @CONTENT VALUES('My voter card number is ABC123456789');
INSERT INTO @CONTENT VALUES('VOter card ID is vbv147258369');
INSERT INTO @CONTENT VALUES('bnl478512369');

SELECT CASE charindex(' ',REMARK)
    WHEN 0 THEN REMARK  
    ELSE REVERSE(SUBSTRING(REVERSE(REMARK),0,CHARINDEX(' ',REVERSE(REMARK))))
END as REMARK FROM @CONTENT

【讨论】:

  • 对未指定 dbms 的问题的产品特定答案。
【解决方案2】:

检查一下。

select Remarks,SUBSTRING(Remarks,PATINDEX('%[0-9]%', Remarks)-3,LEN(Remarks))
FROM #TableName

输出:

【讨论】:

    【解决方案3】:

    由于没有提到RDBMS产品,我将坚持用算法来回答。您需要使用RIGHT 函数并从字符串中提取最后 12 个字符。在MSSQL有RIGHT函数的情况下,在Oracle等产品的情况下,可以通过substring函数和length函数的组合来得到想要的输出。

    假设子字符串函数有substring(input,start_poistion, no_of_characters)这样的签名,那么提取最右边12个字符的方法是

    substring(input_string, length(input_string)-12,12)

    如果这不符合您的要求,另一种解决方案是使用正则表达式,识别所需 12 个字符的起始位置并使用子字符串函数提取它。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2022-08-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-01-14
      • 1970-01-01
      相关资源
      最近更新 更多