SQL:在特殊字符后提取字符串中的最后5位数

时间:2017-07-10 11:31:43

标签: sql sql-server

我正在努力提取标题(自由文本字段)中的最后5位数后特殊字符':' (带空格)。样本记录如下:

    title column
  1  ABC Requirement1 - 1,500 - 3,000 sq m : 12345
  2  10,000 sft shed requirement
  3  OFFICES REQUIRED 500/700 SQ FT : 56789
  4  Land Acquisition : 34567
  5  Storage Requirement : 12345
  6  Land Requirement :100 sq.m

我的结果集应该如下:

   ID
1 12345
3 56789
4 34567
5 12345

它应该只在特殊字符#'之后提取最后5位数字(ID):'并忽略其他记录':'之间。我试图提取ID值以加入另一个表。任何帮助都非常感谢!

5 个答案:

答案 0 :(得分:2)

这应该得到你想要的查询。

SELECT  LEFT(SUBSTRING(Title, CHARINDEX(': ', Title) + 2, LEN(Title)), 5)
FROM    @table
WHERE   [Title] LIKE '%: %'
AND ISNUMERIC(LEFT(SUBSTRING(Title, CHARINDEX(': ', Title) + 2, LEN(Title)), 5)) = 1

答案 1 :(得分:1)

尝试此查询 -

;WITH CTE
AS (
    SELECT Id
        ,CASE 
            WHEN CHARINDEX(':', Title, 1) > 1
                THEN SUBSTRING(Title, CHARINDEX(':', Title, 1) + 2, 5)
            END AS TitleID
    FROM RequirementTable
    )
SELECT ID
    ,TitleID
FROM CTE
WHERE ISNUMERIC(TitleID) = 1;

答案 2 :(得分:1)

首先,如果您需要使用这些长度来形成记录之间的关系,您应该认真重新考虑您存储数据的方式。如果您的数据包含以下内容,这可能是灾难性的:'自然而不是以外键值结尾。并且你很可能不会想到这一点,直到它为时已晚并且处理和/或其他应用程序因此而失败。

然而,为了回答问题的答案,我和@ChesterLin一样,但是有样本数据,包括' ID'输出中的列。

DECLARE @Temp TABLE (ID int, Title varchar(255))

INSERT INTO @Temp
VALUES
(1, 'ABC Requirement1 - 1,500 - 3,000 sq m : 12345'),
(2, '10,000 sft shed requirement'),
(3, 'OFFICES REQUIRED 500/700 SQ FT : 56789'),
(4, 'Land Acquisition : 34567'),
(5, 'Storage Requirement : 12345'),
(6, 'Land Requirement :100 sq.m')


SELECT  ID, LEFT(SUBSTRING(Title, CHARINDEX(': ', Title) + 2, LEN(Title)), 5) AS [Extracted Value]
FROM    @Temp
WHERE   [Title] LIKE '%: %'
AND ISNUMERIC(LEFT(SUBSTRING(Title, CHARINDEX(': ', Title) + 2, LEN(Title)), 5)) = 1

答案 3 :(得分:0)

你可以得到最后5位

SUBSTR(column, LENGTH(column) - 5, 5)

OR

SELECT RIGHT('ABC Requirement1 - 1,500 - 3,000 sq m : 12345',5)

OR完整查询

SELECT substr(title, character(title)-5) from table_name;

答案 4 :(得分:-1)

substr(column, -5, 5)

从字符串中的最后一个字符开始,并给出五个字符。 然后将其转换为INT。

select cast(substr(column, -5, 5) as INT) as ID from table_name
where isnumeric(substr(column, -5, 5)) = 1

我希望这会奏效。或者,就像这样。