删除 sql 中“-”后的列值
Remove column value after '-' in sql
我刚开始学习 SQL 小数据集。我正在使用 SQL 服务器,正在尝试清理数据。
我有这样的值的列:
Job_title
STAFF ENGINEER-SOFTWARE
Programmer Analyst -IT
Analyst Communication Systems [KBGFJG68718-2]
预期结果应该像下面的table,这里我尝试删除特殊字符、数字和罗马字母。
Job_title
STAFF ENGINEER
Programmer Analyst
Analyst Communication Systems
谢谢
两步:
- 找到第一个既不是字母也不是空格也不是数字的字符。您可以为此使用
PATINDEX
。
- 如果找到这样的字符,将字符串提取到那里并删除尾随空格。否则取整个字符串。
查询:
select
case when patindex('%[^a-zA-Z0-9 ]%', job_title) > 0 then
rtrim(substring(job_title, 1, patindex('%[^a-zA-Z0-9 ]%', job_title) - 1))
else
job_title
end as job
from mytable;
演示:https://dbfiddle.uk/?rdbms=sqlserver_2019&fiddle=ab1d7bd0890530c55ced09457f532136
我刚开始学习 SQL 小数据集。我正在使用 SQL 服务器,正在尝试清理数据。
我有这样的值的列:
Job_title |
---|
STAFF ENGINEER-SOFTWARE |
Programmer Analyst -IT |
Analyst Communication Systems [KBGFJG68718-2] |
预期结果应该像下面的table,这里我尝试删除特殊字符、数字和罗马字母。
Job_title |
---|
STAFF ENGINEER |
Programmer Analyst |
Analyst Communication Systems |
谢谢
两步:
- 找到第一个既不是字母也不是空格也不是数字的字符。您可以为此使用
PATINDEX
。 - 如果找到这样的字符,将字符串提取到那里并删除尾随空格。否则取整个字符串。
查询:
select
case when patindex('%[^a-zA-Z0-9 ]%', job_title) > 0 then
rtrim(substring(job_title, 1, patindex('%[^a-zA-Z0-9 ]%', job_title) - 1))
else
job_title
end as job
from mytable;
演示:https://dbfiddle.uk/?rdbms=sqlserver_2019&fiddle=ab1d7bd0890530c55ced09457f532136