如何从SQL表的subject列提取VR开头Job No与日期?
提取Subject列中的Job No和日期的SQL查询语句
根据你提供的Subject列格式(固定包含Job No:VRxxxxxx on YYYY-MM-DD结构),以下是不同SQL数据库对应的查询语句,用于提取VR开头的Job No和日期:
MySQL/MariaDB
使用SUBSTRING_INDEX函数逐层截取目标内容:
SELECT -- 提取Job No:先截取到" on "之前的部分,再取"Job No:"之后的内容 SUBSTRING_INDEX(SUBSTRING_INDEX(subject, ' on ', 1), 'Job No:', -1) AS job_no, -- 提取日期:直接截取" on "之后的所有内容(日期为固定格式,此处无需额外长度限制) SUBSTRING_INDEX(subject, ' on ', -1) AS job_date FROM your_table_name;
SQL Server
使用CHARINDEX定位关键字符串位置,再用SUBSTRING截取:
SELECT -- 提取Job No:计算"Job No:"和" on "之间的位置差,截取中间内容 SUBSTRING( subject, CHARINDEX('Job No:', subject) + 7, -- "Job No:"共7个字符,跳过这部分 CHARINDEX(' on ', subject) - CHARINDEX('Job No:', subject) - 7 ) AS job_no, -- 提取日期:从" on "之后开始截取10位(YYYY-MM-DD固定为10位) SUBSTRING( subject, CHARINDEX(' on ', subject) + 4, -- " on "共4个字符(空格+on+空格),跳过这部分 10 ) AS job_date FROM your_table_name;
PostgreSQL
利用正则表达式直接匹配目标内容,写法更简洁:
SELECT -- 匹配VR开头的Job No SUBSTRING(subject FROM 'Job No:(VR\d+)') AS job_no, -- 匹配YYYY-MM-DD格式的日期 SUBSTRING(subject FROM '(\d{4}-\d{2}-\d{2})') AS job_date FROM your_table_name;
Oracle
使用INSTR定位位置,SUBSTR截取内容:
SELECT -- 提取Job No SUBSTR( subject, INSTR(subject, 'Job No:') + 7, INSTR(subject, ' on ') - INSTR(subject, 'Job No:') - 7 ) AS job_no, -- 提取日期:截取10位固定长度的日期格式 SUBSTR(subject, INSTR(subject, ' on ') + 4, 10) AS job_date FROM your_table_name;
注意:请将上述语句中的
your_table_name替换为你的实际表名。
内容的提问来源于stack exchange,提问作者shazma
相关产品推荐
相关产品推荐

