首先让我说这是一个我没有管理的数据库视图所以数据就是这样。它有一个职位名称列,其中还包括工作级别(例如软件工程师2,设计师C,空中交通管制员E-1等)我需要获得不同的职称。所有软件工程师(级别1到6)都应返回单个值。职称可以包含一个或多个单词。级别可以包含1到3个字符。我试过这个来获得等级
SELECT
jobtitle,
REVERSE(LEFT(REVERSE(jobtitle), CHARINDEX(' ', REVERSE(jobtitle)) - 1)) AS level
获得关卡,但我无法弄清楚如何从工作头衔中剥离,然后为这些获得明显的价值。
答案 0 :(得分:1)
如果等级总是一个单词,你可以使用下面的单词去掉最后一个单词,这样你就得到了职位:
SELECT SUBSTRING(jobtitle, 1, LEN(jobtitle) - CHARINDEX(' ', REVERSE(jobtitle)))
或者如果您更喜欢使用LEFT而不是SUBSTRING:
SELECT LEFT(jobtitle,LEN(jobtitle)-CHARINDEX(' ', REVERSE(jobtitle),0)+1)
答案 1 :(得分:0)
如果您的等级始终是格式" E-1"或者只是" C"或" A4"你可以拆分完整职位上的最后一个空格。
试试这个:
SELECT RIGHT(jobtitle, charindex(' ', reverse(jobtitle) + ' ') - 1)
右边会让你达到这个水平。或者:
SELECT LEFT(jobtitle, len(jobtitle) - charindex(' ', reverse(jobtitle) + ' '))
LEFT将为您提供标题。
我在寻找C#string.LastIndexOf()方法的sql等价物时遇到过这些。
如果关卡可以有空格,这会变得相当复杂。
您可能只想将这两个值拉到临时表的2列中,以及任何其他相关信息。然后在临时表上进行聚合。这将为您提供更多的分析自由,并且可能比尝试分离各个部分,然后在一个镜头中对子字符串执行明显的更好的性能。
答案 2 :(得分:0)
docker network ls
答案 3 :(得分:0)
使用apply运算符可以重复使用字符串中生成的位置进行后续计算。 e.g。
MS SQL Server 2017架构设置:
INSERT INTO USER (username, password, roles)
VALUES('admin', '123', STRINGTOUTF8('ROLE_ADMIN'));
查询1 :
CREATE TABLE Table1
([jobtitle] varchar(50))
;
INSERT INTO Table1
([jobtitle])
VALUES
(NULL),
(''),
('nospacehere'),
('Software Engineer 2'),
('Designer C'),
('Air Traffic Controller E-1')
;
<强> Results 强>:
select
jobtitle
, left(jobtitle,a.pos)
, ltrim(substring(jobtitle,a.pos+1,50))
, a.pos
from table1
outer apply (
select len(jobtitle) - charindex(' ',reverse(jobtitle))
) a (pos)