sql - 如何找到始终包含确切数量的字符类型的子字符串?

标签 sql sql-server database string substring

我想在表中的一列中提取一个子字符串,以便将其用作与另一个表的连接。

但是我有一个问题。子字符串并不总是在同一位置或前面有相同的字符。

例如来自以下:

SA 2019M05 7022b000003CDMmAAO - SA20190323 - 2019-03-23 09:20:00 Europe/Amsterdam

我只需要:

7022b000003CDMmAAO

我已经尝试将 SUBSTRINGCHARINDEX 结合使用,并且它正在运行。 但是,我不想依赖总是以 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 类型字符组成的子字符串?

最佳答案

感谢@Gserg patindex 正在工作:

SELECT 
 CASE WHEN 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]%',t.[jobName]) = 0 THEN NULL 
      ELSE SUBSTRING(t.[jobName],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]%',t.[jobName]),+18) END AS [Code]
FROM table t

我只使用了前 12 个字符,因为我发现最后一部分可能会有所不同。添加时的情况所以我只显示添加代码的作业名称。它看起来不漂亮,但可以完成工作。

关于sql - 如何找到始终包含确切数量的字符类型的子字符串?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55900449/

相关文章:

sql-server - 计算 count(column) > 2 的记录

SQL解析键值字符串

sql - 如何使用 SQL 计算在 stackexchange 上发表评论所需的平均时间?

database - SQLite:更新相同数据时会写入磁盘吗?

database - 从 1.4.200 升级 H2 版本 2.0.202

sql - 这有什么问题?

mysql - 检查电子邮件是否已存在于数据库中并添加/更改数据

android - 更快的数据库表创建

Mysql:如何在查询中使用CASE

php - mysql搜索查询代码问题