[英]Using CHARINDEX IN SQL SERVER TO SPLIT A STRING WITH MULTIPLE SPECIAL CHARACTERS
I have a field called contract details with the following contents我有一个名为合同详细信息的字段,其中包含以下内容
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;
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.