【发布时间】:2019-05-10 15:00:03
【问题描述】:
我无法从字符串中提取所选字符
这是来自名为“TXT”的字段的值的 sn-p:
- FNP,2018 年 10 月 9 日,PO-00123456 - F333330- FA_002056
- FNP,18-09-2018,PO-00987654 - F010122- FA_002056
- FNP,2017 年 12 月 28 日,PO-00123987 - F10101
- FNP,13-03-2019,FRPO-35412 - F27272-ANNUL PO
我想提取 F333330、F010122、F10101 和 F27272
我已经尝试过 charindex、left/right 和 substring 但还没有破解它
SELECT TXT ,
CASE WHEN CHARINDEX('-',(SUBSTRING(txt,CHARINDEX('-',txt,2)+1,99)))=0
THEN
LTRIM(RTRIM(SUBSTRING(txt,CHARINDEX('-',txt,2)+1,99)))
ELSE
LTRIM(RTRIM(SUBSTRING(txt,CHARINDEX('-',txt,2) +1,CHARINDEX('-',SUBSTRING(txt,CHARINDEX('-',txt,2)+1,99))-1)))
END
FROM #test
我想要的行集只是显示:
- F333330
- F010122
- F10101
- F27272
我尝试了其他没有 case 语句的子字符串变体,但没有运气。有人可以帮忙吗?
谢谢, 纽姆斯
【问题讨论】:
-
我认为您应该尝试在您的代码中执行此操作并将 SQL 复杂性降至最低,这样做时您将拥有很大的灵活性。尽量减少数据库访问,代码应该做大部分工作,如果可能的话,只在必要时访问数据库。我会在今天的下一个空闲时间帮助编写代码。
-
你能explain to a rubber duck如何识别有趣的子串吗?如果你不能,那么实施起来将是一个相当大的挑战。是否是以“F”开头并贯穿所有以下数字的任何子字符串,至少有五位数字,直到非数字或字符串结尾?是否涉及“FNP”或其他内容?