【发布时间】:2019-09-17 21:44:58
【问题描述】:
我在表中有一个列,我想在其中提取一个子字符串,以便将其用作另一个表的连接。
但是我有一个问题。子字符串并不总是在同一个位置或前面有同一个字符。
例如来自以下:
SA 2019M05 7022b000003CDMmAAO - SA20190323 - 2019-03-23 09:20:00 Europe/Amsterdam
我只需要:
7022b000003CDMmAAO
我尝试将SUBSTRING 与CHARINDEX 结合使用,并且它正在工作。 但是,我不想依赖始终以 70 开头的子字符串。
另外,代码并不总是在- 前面。一致的一个部分是代码的制作方式。它总是按以下特定顺序由数字和字母组成:0000a000000aaaaaaa。
SELECT
CASE WHEN t.[jobName] LIKE '%70%' THEN SUBSTRING(t.[jobName],CHARINDEX('70',t.[jobName]),+18) ELSE NULL END AS [Code]
FROM table t
那么有没有办法让我找到由0000a000000aaaaaaa 类型字符组成的子字符串?
【问题讨论】:
-
patindex('%[0-9][0-9][0-9][0-9][a-z][0-9][0-9][0-9][0-9][0-9][0-9][a-z][a-z][a-z][a-z][a-z][a-z][a-z]%', t.[jobName])? -
代码总是在第二个空格之后吗?不止一个样本,显示不同的变化,会使事情变得更容易;因为我们不需要猜测。
-
看起来像一个空格分隔的字符串,如果是这样,你可以简单地提取第二个和第三个空格之间的所有内容。
-
不,很遗憾没有。从现在开始,代码将从子字符串开始。但我仍然需要修复过去的所有子字符串。
-
所有的 old 都是第三个(空格)分隔的项目吗?同样,更多样本真的会有所帮助。
标签: sql sql-server database string substring