首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >SQL Server -获取字符串的不同部分

SQL Server -获取字符串的不同部分
EN

Stack Overflow用户
提问于 2018-03-21 21:14:57
回答 4查看 452关注 0票数 0

首先,我要说的是,这是一个我不管理的数据库视图,所以数据就是它。它有一个职称列,其中还包括职务级别(例如,软件工程师2、设计者C、空中交通控制器E-1等)。我需要得到不同的职位。所有软件工程师(级别1到6)都应该返回一个值。职称中可以有一个或多个单词。级别可以有1到3个字符。我试过这个来达到这个水平

代码语言:javascript
复制
SELECT 
    jobtitle, 
    REVERSE(LEFT(REVERSE(jobtitle), CHARINDEX(' ', REVERSE(jobtitle)) - 1)) AS level

为了达到这个水平,但我想不出如何去掉这份工作头衔,然后为这些职位获得独特的价值。

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2018-03-21 21:18:18

如果“级别”始终是您可以使用的单词,下面这个词将删除最后一个单词,因此您只能得到职务名称:

代码语言:javascript
复制
SELECT SUBSTRING(jobtitle, 1, LEN(jobtitle) - CHARINDEX(' ', REVERSE(jobtitle)))

或者如果您喜欢使用LEFT而不是SUBSTRING:

代码语言:javascript
复制
SELECT LEFT(jobtitle,LEN(jobtitle)-CHARINDEX(' ', REVERSE(jobtitle),0)+1)
票数 1
EN

Stack Overflow用户

发布于 2018-03-21 21:33:44

如果您的级别总是格式为"E-1“,或者只是"C”或"A4“,那么您可以在您的完整职务标题的最后一个空格上进行分割。

试试这个:

代码语言:javascript
复制
SELECT RIGHT(jobtitle, charindex(' ', reverse(jobtitle) + ' ') - 1)

右边的人会让你达到水平的。或者:

代码语言:javascript
复制
SELECT LEFT(jobtitle, len(jobtitle) - charindex(' ', reverse(jobtitle) + ' '))

左边的人会给你头衔的。

我在寻找C# string.LastIndexOf()方法的sql等效值时遇到了这些情况。

如果级别可以有一个空间,这就变得更加复杂了。

您可能只想将这2个值与任何其他相关信息一起拖到临时表上的2列中。然后在临时表上进行聚合。这将为您提供更多的分析自由,并且可能比尝试分离各部分,然后在子字符串上一次完成不同的操作更好的性能。

票数 0
EN

Stack Overflow用户

发布于 2018-03-21 23:30:46

代码语言:javascript
复制
select  reverse(stuff(reverse([JOBTITLE]), 1, 3, '')) ,    Substring(reverse(stuff(([JOBTITLE]), 1, 3, '')),0,CHARINDEX(' ', reverse(stuff(([JOBTITLE]), 1, 3, ''))))
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49416625

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档