-1

使用 SQL Server

我有这个:

在此处输入图像描述

我想要这个:

在此处输入图像描述

有人知道怎么做吗?

4

1 回答 1

0

请尝试以下方法。它基于 XML 和 XQuery 的使用。

XML 和 XQuery 数据模型基于有序序列。这就是为什么很容易获得序列中任何项目的位置的原因:第一个、最后一个等。

SQL

-- DDL and sample data population, start
DECLARE @tbl  TABLE (ID INT IDENTITY PRIMARY KEY, Street VARCHAR(100));
INSERT INTO @tbl (Street) VALUES
('SANDISLE DR.'),
('TAMMY LANE'),
('OLD OREGON TRAIL'),
('ELTEDA'),
('PAROCAR ROAD');
-- DDL and sample data population, end

DECLARE @separator CHAR(1) = SPACE(1);

;WITH rs AS
(
    SELECT * 
        , TRY_CAST('<root><r><![CDATA[' + 
           REPLACE(Street, @separator, ']]></r><r><![CDATA[') + 
           ']]></r></root>' AS XML) AS xmldata
    FROM @tbl
)
SELECT ID, Street
, xmldata.query('if (count(/root/r) gt 1) then data(/root/r[position() ne last()]) 
    else data(/root/r[1])').value('(.)', 'VARCHAR(100)') AS StreetName
, xmldata.query('if (count(/root/r) gt 1) then data(/root/r[last()])
    else ()').value('(.)', 'VARCHAR(100)') AS StreetSuffix
FROM rs;

输出

+----+------------------+------------+--------------+
| ID |      Street      | StreetName | StreetSuffix |
+----+------------------+------------+--------------+
|  1 | SANDISLE DR.     | SANDISLE   | DR.          |
|  2 | TAMMY LANE       | TAMMY      | LANE         |
|  3 | OLD OREGON TRAIL | OLD OREGON | TRAIL        |
|  4 | ELTEDA           | ELTEDA     |              |
|  5 | PAROCAR ROAD     | PAROCAR    | ROAD         |
+----+------------------+------------+--------------+
于 2021-01-27T20:09:42.777 回答