如何从SQL中的地址字段解析apt no

如何从SQL中的地址字段解析apt no,sql,sql-server,tsql,Sql,Sql Server,Tsql,我需要提取数据中的最后一个数字作为APTNO [在此处输入图像描述][1] 我的数据如下图所示。我马上就要得到我的结果了,但我想要数字,而且当有APt时,我也想要带有APt的数字对于您的示例,您可以使用string\u split: Gordon的答案对SQL 2016及以上版本非常有用。对于旧版本,这可能会起作用 SELECT t.Address ,REVERSE(LEFT(REVERSE(t.Address), CHARINDEX(' ', REVERSE(t.Addres

我需要提取数据中的最后一个数字作为APTNO

[在此处输入图像描述][1]


我的数据如下图所示。我马上就要得到我的结果了,但我想要数字,而且当有APt时,我也想要带有APt的数字

对于您的示例,您可以使用string\u split:


Gordon的答案对SQL 2016及以上版本非常有用。对于旧版本,这可能会起作用

SELECT  t.Address
        ,REVERSE(LEFT(REVERSE(t.Address), CHARINDEX(' ', REVERSE(t.Address), 0))) AS ApartmentNum
FROM    Table AS t;

还有一个基于JSON的方法

它将从SQL Server 2016开始工作

SQL Server 2016

SQL Server 2008及以后版本

基于XML/XQuery的方法。当每行的令牌数波动或未知时,此选项非常有用

DECLARE @separator CHAR(1) = SPACE(1);
SELECT * 
    , TRY_CAST('<root><r><![CDATA[' + 
    REPLACE(tokens, @separator, ']]></r><r><![CDATA[') + 
    ']]></r></root>' AS XML).value('(/root/r[last()]/text())[1]', 'NVARCHAR(30)') AS token
FROM @tbl;

所有地址的末尾都有公寓/套房号码吗?到目前为止,您尝试了什么,遇到了什么问题?根据问题指南,请展示您尝试了什么,并告诉我们您在本网站或其他地方发现了什么,以及为什么它不能满足您的需求。说真的,每个地址都有公寓号码吗?我会非常惊讶,您需要显示代表更广泛数据集的数据。请不要对我们大喊大叫,也就是说,不要使用所有的大写字母。在提问时,你需要提供一个最小的可复制的例子。请参考以下链接:请提供以下内容:1 DDL和示例数据填充,即创建表和插入T-SQL语句。2您需要做什么,即逻辑和代码尝试在T-SQL中实现它。3期望输出,基于上述1中的样本数据。4您的SQL Server版本选择@@version;但我还是觉得这不是我想要的,我只是想得到Apt号码,任何时候我们有accronym Apt,它应该会得到一切there@sindhurilokesh,正如我前面提到的,您需要提供一个最小的可复制示例。所有的1-4。当它完成时。我可以重新打开你的帖子。这个代码帮助了我,但我仍然实现了我的目标results@sindhurilokesh,再次编辑你的问题,放在1-4处。我会帮你得到你所需要的。谢谢你花时间,这个代码不起作用
-- DDL and sample data population, start
DECLARE @tbl TABLE (ID INT IDENTITY PRIMARY KEY, tokens VARCHAR(250));  
INSERT Into @tbl (tokens) VALUES 
('250 Cambridge ST 305'),
('30 ACKERS AVE 2');
-- DDL and sample data population, end

DECLARE @Word INT = 4;
SELECT * 
    , token = JSON_VALUE('["' +
        REPLACE(REPLACE(tokens
            ,'"','\"')
            ,' ','","') +
        '"]', CONCAT('$[', @Word-1,']'))
FROM @tbl ;
DECLARE @separator CHAR(1) = SPACE(1);
SELECT * 
    , TRY_CAST('<root><r><![CDATA[' + 
    REPLACE(tokens, @separator, ']]></r><r><![CDATA[') + 
    ']]></r></root>' AS XML).value('(/root/r[last()]/text())[1]', 'NVARCHAR(30)') AS token
FROM @tbl;
+----+----------------------+-------+
| ID |        tokens        | token |
+----+----------------------+-------+
|  1 | 250 Cambridge ST 305 |   305 |
|  2 | 30 ACKERS AVE 2      |     2 |
+----+----------------------+-------+