我正在努力提取标题(自由文本字段)中的最后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值以加入另一个表。任何帮助都非常感谢!
答案 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
我希望这会奏效。或者,就像这样。