繁体   English   中英

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

[英]SQL Server - get distinct part of string

首先,我要说这是我不管理的数据库视图,因此数据就是它。 它有一个职位标题列,其中还包含职位级别(例如,软件工程师2,设计师C,空中交通管制员E-1等),我需要获取不同的职位标题。 所有软件工程师(级别1至6)应返回一个值。 职位名称中可以包含一个或多个单词。 级别可以包含1到3个字符。 我试图这样做以获得水平

SELECT 
    jobtitle, 
    REVERSE(LEFT(REVERSE(jobtitle), CHARINDEX(' ', REVERSE(jobtitle)) - 1)) AS level

得到的水平,但我不知道如何剥离职称,然后为这些获得独特的价值。

如果level始终是一个单词,则可以使用以下命令去除最后一个单词,以便仅获得职位名称:

SELECT SUBSTRING(jobtitle, 1, LEN(jobtitle) - CHARINDEX(' ', REVERSE(jobtitle)))

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

SELECT LEFT(jobtitle,LEN(jobtitle)-CHARINDEX(' ', REVERSE(jobtitle),0)+1)

如果您的级别始终为“ 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列中。 然后在临时表上进行汇总。 与尝试将片段分开然后对子字符串进行不同的处理相比,这将为您提供更大的分析自由,并且可能会提供更好的性能。

select  reverse(stuff(reverse([JOBTITLE]), 1, 3, '')) ,    Substring(reverse(stuff(([JOBTITLE]), 1, 3, '')),0,CHARINDEX(' ', reverse(stuff(([JOBTITLE]), 1, 3, ''))))

使用apply运算符可将字符串中生成的位置重新用于后续计算。 例如

SQL小提琴

MS SQL Server 2017架构设置

CREATE TABLE Table1
    ([jobtitle] varchar(50))
;

INSERT INTO Table1
    ([jobtitle])
VALUES
    (NULL),
    (''),
    ('nospacehere'),
    ('Software Engineer 2'),
    ('Designer C'),
    ('Air Traffic Controller E-1')
;

查询1

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)

结果

|                   jobtitle |                        |        |    pos |
|----------------------------|------------------------|--------|--------|
|                     (null) |                 (null) | (null) | (null) |
|                            |                        |        |      0 |
|                nospacehere |            nospacehere |        |     11 |
|        Software Engineer 2 |      Software Engineer |      2 |     17 |
|                 Designer C |               Designer |      C |      8 |
| Air Traffic Controller E-1 | Air Traffic Controller |    E-1 |     22 |

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM