如何从字符串中返回固定长度的子字符串?

时间:2016-12-28 04:11:27

标签: sql substring

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

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

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

ABC123456789
vbv147258369
bnl478512369

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

3 个答案:

答案 0 :(得分:0)

尝试:

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

答案 1 :(得分:0)

检查这个。

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

输出:

enter image description here

答案 2 :(得分:0)

由于没有提到RDBMS产品,我将坚持用算法回答。您需要使用RIGHT函数并从String中提取最后12个字符。如果MSSQL RIGHT功能可用,对于Oracle和其他产品,您可以使用substring函数和length函数的组合来获得所需的输出。

假设子字符串函数具有substring(input,start_poistion, no_of_characters)之类的签名,那么提取最多12个字符的方法是

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

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