简体   繁体   English

在 SQL SERVER 中使用 CHARINDEX 拆分具有多个特殊字符的字符串

[英]Using CHARINDEX IN SQL SERVER TO SPLIT A STRING WITH MULTIPLE SPECIAL CHARACTERS

I have a field called contract details with the following contents我有一个名为合同详细信息的字段,其中包含以下内容

  • Money~25030.1!RATE~12!DAYS~30!YEAR~360! Money~25030.1!RATE~12!DAYS~30!YEAR~360!

I would like to split it as below我想将其拆分如下

Money |钱 | rate |率| days |天| year

25030.1 | 25030.1 | 12 | 12 | 30 | 30 | 360 360

How can Archive this using CHARINDEX AND SUBSTRING如何使用 CHARINDEX 和 SUBSTRING 对此进行存档

Sometimes the contains appear like below, with no days but the days column can be recalculated.有时包含如下所示,没有天数,但天数列可以重新计算。

YEAR~360!RATE~16!Money~421777.78! YEAR~360!RATE~16!Money~421777.78!

year |年 | rate |率| money

360 | 360 | 12 | 12 | 25030.1 25030.1

Here is one approach:这是一种方法:

SELECT
    SUBSTRING(col, CHARINDEX('Money', col) + 6,
                   CHARINDEX('!RATE~', col) - CHARINDEX('Money', col) - 6) AS Money,
    SUBSTRING(col, CHARINDEX('!RATE~', col) + 6,
                   CHARINDEX('!DAYS~', col) - CHARINDEX('!RATE~', col) - 6) AS rate,
    SUBSTRING(col, CHARINDEX('!DAYS~', col) + 6,
                   CHARINDEX('!YEAR~', col) - CHARINDEX('!DAYS~', col) - 6) AS days,
    LEFT(SUBSTRING(col, CHARINDEX('!YEAR~', col) + 6, LEN(col)),
    SUBSTRING(col, CHARINDEX('!YEAR~', col) + 6,
                   CHARINDEX('!', SUBSTRING(col, CHARINDEX('!YEAR~', col) + 6, LEN(col))) - 1) AS year
FROM yourTable;

来自下面演示链接的屏幕截图

Demo 演示

Note that the above query, as the demo shows, is robust with regard to your target text appearing anywhere inside a larger string.请注意,如演示所示,上述查询对于出现在较大字符串内任何位置的目标文本而言是稳健的。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM