sql - 提取两个字符之间的某些文本
问题描述
我有一个nvarchar
字符串,我需要从中提取字符之间的某些文本。
例子:1.abc.5,m001-1-Exit,822-FName-18001233321--2021-09-23 13:53:10 Thursday-m001-1-Exit-Swipe,Card NO: 822User ID: FNameName: 18001233321Dept: Read Date: 2021-09-23 13:53:10 ThursdayAddr: m001-1-ExitStatus: Swipe,07580ec2000002a52E917D0000000000372BA56E11010000
我需要的:
| Name | Phone Number |
| -------- | -------------- |
| FName | 1800123321 |
我的尝试:
SELECT SUBSTRING(col, LEN(LEFT(col, CHARINDEX ('-', col))) + 1, LEN(col) - LEN(LEFT(col, CHARINDEX ('-', col))) - LEN(RIGHT(col, LEN(col) - CHARINDEX ('-', col))) - 1);
解决方案
单程:
- 使用
patindex
查找“FName-” - 删除字符串的开头,直到并包括“FName-”
- 用于
patindex
查找“--” - 从“--”中删除字符串的其余部分
您可以将查询合并到一行,但您会发现自己重复了部分逻辑——我希望避免这种情况。一次计算一件事使调试更容易。
select
A.Col
, B.StringStart
, C.NewString
, patindex('%--%',C.NewString) NewStringEnd
, substring(C.NewString,1,patindex('%--%',C.NewString)-1) -- <- Required Result
from (
values
(N'1.abc.5,m001-1-Exit,822-FName-18001233321--2021-09-23 13:53:10 Thursday-m001-1-Exit-Swipe,Card NO: 822User ID: FNameName: 18001233321Dept: Read Date: 2021-09-23 13:53:10 ThursdayAddr: m001-1-ExitStatus: Swipe,07580ec2000002a52E917D0000000000372BA56E11010000')
) A (Col)
cross apply (
values
(patindex('%FName-%',Col))
) B (StringStart)
cross apply (
values
(substring(A.Col,B.StringStart+6,len(A.Col)-B.StringStart-6))
) C (NewString);
推荐阅读
- python - py请求会话持久性到redis
- mysql - MySQl 使用 COUNT 和 CASE 语句
- statistics - 用于检查分类时间序列的平稳/非平稳的统计测试
- python - 在 Python 代码中添加计时器有哪些实际应用?
- facebook - Facebook 分析不向我显示数据
- sapui5 - 值帮助对话框在小屏幕尺寸上不起作用
- bpmn - 如何在用户任务中定义/传递外部表单变量?
- python - 将新查询请求 ?page=2 添加到现有查询 ?q=python
- python - 如何比较数据并从 pandas 的 multiIndex 数据框中选择最大值?
- mongodb - MongoDB 高一致性