gpt4 book ai didi

sql - 从竖线分隔的列中选择数据

转载 作者:行者123 更新时间:2023-12-04 20:56:42 24 4
gpt4 key购买 nike

我在表 CurrentOrders 中有一列 ClientInformation,它包含一个竖线分隔的字符串:

5275=7147|109=62F36|5075=BCRM|12221=PortwareALGO1

每个 number= 是一个 FIX 标记,我想将其命名为自己的列,并且需要能够在 SELECT 语句和 WHERE< 中使用 子句。

我破解了一些东西,让我可以识别我需要的行,但我不能在 SELECTWHERE 中使用...

   (LEFT (RIGHT(ClientInformation, ( LEN(ClientInformation) - (PATINDEX('%109=%',ClientInformation) + 3) )),
PATINDEX('%|%', RIGHT(ClientInformation, ( LEN(ClientInformation) - (PATINDEX('%109=%',ClientInformation) + 2) ))) -2))as AccountID

我假设我需要将每个 number= 分解到我的表中它自己的临时列中,但我很难找到我可以遵循的解释。

因此,我希望这些值中的每一个如下:

5275=7147|109=62F36|5075=BCRM|12221=PortwareALGO1

5275= as ClientBook
109= as AccountID
5075= as Broker ID
12221= as RouteTrace

最佳答案

以下方法使用多个 CROSS APPLY,因为为每个计算指定的别名可在下一个 CROSS APPLY 中重复使用,总体而言,这有助于简化代码(恕我直言)。

SELECT
ClientBook
, AccountID
, BrokerID
, RouteTrace
FROM CurrentOrders
CROSS APPLY (
SELECT
PATINDEX('%|%', ClientInformation)
, LEN(ClientInformation)
) ca1 (p1, len1)
CROSS APPLY (
SELECT
p1 + PATINDEX('%|%', SUBSTRING(ClientInformation, p1 + 1, len1))
) ca2 (p2)
CROSS APPLY (
SELECT
p2 + PATINDEX('%|%', SUBSTRING(ClientInformation, p2 + 1, len1))
) ca3 (p3)
CROSS APPLY (
SELECT
SUBSTRING(ClientInformation, 1, p1 - 1)
, SUBSTRING(ClientInformation, p1 + 1, p2 - p1 - 1)
, SUBSTRING(ClientInformation, p2 + 1, p3 - p2 - 1)
, SUBSTRING(ClientInformation, p3 + 1, len1)
) ca4 (s1, s2, s3, s4)
CROSS APPLY (
SELECT
LEFT(s1, PATINDEX('%=%', s1) - 1)
, LEFT(s2, PATINDEX('%=%', s2) - 1)
, LEFT(s3, PATINDEX('%=%', s3) - 1)
, LEFT(s4, PATINDEX('%=%', s4) - 1)
) ca5 (ClientBook, AccountID, BrokerID, RouteTrace)
;
| CLIENTBOOK | ACCOUNTID | BROKERID | ROUTETRACE |
|------------|-----------|----------|------------|
| 5275 | 109 | 5075 | 12221 |

参见:http://sqlfiddle.com/#!3/f85bc/3

关于sql - 从竖线分隔的列中选择数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24311620/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com