首先,我要说的是,这是一个我不管理的数据库视图,所以数据就是它。它有一个职称列,其中还包括职务级别(例如,软件工程师2、设计者C、空中交通控制器E-1等)。我需要得到不同的职位。所有软件工程师(级别1到6)都应该返回一个值。职称中可以有一个或多个单词。级别可以有1到3个字符。我试过这个来达到这个水平
SELECT
jobtitle,
REVERSE(LEFT(REVERSE(jobtitle), CHARINDEX(' ', REVERSE(jobtitle)) - 1)) AS level为了达到这个水平,但我想不出如何去掉这份工作头衔,然后为这些职位获得独特的价值。
发布于 2018-03-21 21:18:18
如果“级别”始终是您可以使用的单词,下面这个词将删除最后一个单词,因此您只能得到职务名称:
SELECT SUBSTRING(jobtitle, 1, LEN(jobtitle) - CHARINDEX(' ', REVERSE(jobtitle)))或者如果您喜欢使用LEFT而不是SUBSTRING:
SELECT LEFT(jobtitle,LEN(jobtitle)-CHARINDEX(' ', REVERSE(jobtitle),0)+1)发布于 2018-03-21 21:33:44
如果您的级别总是格式为"E-1“,或者只是"C”或"A4“,那么您可以在您的完整职务标题的最后一个空格上进行分割。
试试这个:
SELECT RIGHT(jobtitle, charindex(' ', reverse(jobtitle) + ' ') - 1)右边的人会让你达到水平的。或者:
SELECT LEFT(jobtitle, len(jobtitle) - charindex(' ', reverse(jobtitle) + ' '))左边的人会给你头衔的。
我在寻找C# string.LastIndexOf()方法的sql等效值时遇到了这些情况。
如果级别可以有一个空间,这就变得更加复杂了。
您可能只想将这2个值与任何其他相关信息一起拖到临时表上的2列中。然后在临时表上进行聚合。这将为您提供更多的分析自由,并且可能比尝试分离各部分,然后在子字符串上一次完成不同的操作更好的性能。
发布于 2018-03-21 23:30:46
select reverse(stuff(reverse([JOBTITLE]), 1, 3, '')) , Substring(reverse(stuff(([JOBTITLE]), 1, 3, '')),0,CHARINDEX(' ', reverse(stuff(([JOBTITLE]), 1, 3, ''))))https://stackoverflow.com/questions/49416625
复制相似问题