从列值中删除不需要的文本

时间:2014-02-26 09:31:36

标签: sql sql-server

我不知道该怎么做。在我的桌子上,我有描述与描述代码混合。我需要删除代码描述,只需要描述。描述只是没有首字母缩略词的第一部分(最后的大写字母)。我使用SQL Server 2012

示例:

ColumnDescription
Chemistry Q
education E
psychology P
Sociology SOC
Documentation DOC
communication COM
Political Science CP
Pharmacy and Toxicology FT
Engineering Education (General) ING-G

2 个答案:

答案 0 :(得分:1)

如果您希望简单地删除每个字符串末尾的代码,那么执行此操作的方法是识别字符串中的最后一个空格字符,然后使用SUBSTRING提取该字符前的所有内容:

SELECT  SUBSTRING(ColumnDescription, 0, LEN(ColumnDescription) - CHARINDEX(' ', REVERSE(ColumnDescription)) + 1) AS ColumnDescription
  FROM  Table

请注意,我不知道您的表名称是什么,所以我将其称为Table

这有效地反转了列文本(使用REVERSE),找到第一个空格字符(使用CHARINDEX),然后从文本的长度中减去它(使用LEN })。 然后使用简单的SUBSTRING来提取文本的最左边部分,从而得到输出:

ColumnDescription
-----------------
Chemistry
education
psychology
Sociology
Documentation
communication
Political Science
Pharmacy and Toxicology
Engineering Education (General)

答案 1 :(得分:0)

根据您的示例数据,我猜您的问题可以简化为:

  

将字符串拆分为字符串

中的最后一个空格字符

在哪种情况下:

DECLARE @your_table table (
   ColumnDescription varchar(100)
);

INSERT INTO @your_table (ColumnDescription)
  VALUES ('Chemistry Q')
       , ('education E')
       , ('psychology P')
       , ('Sociology SOC')
       , ('Documentation DOC')
       , ('communication COM')
       , ('Political Science CP')
       , ('Pharmacy and Toxicology FT')
       , ('Engineering Education (General) ING-G');

SELECT *
     , SubString(ColumnDescription, number_of_characters - last_space + 2, 100) As last_part
     , SubString(ColumnDescription, 0, number_of_characters - last_space + 2) As first_part
FROM   (
        SELECT ColumnDescription
             , Len(ColumnDescription) As number_of_characters
             , Reverse(ColumnDescription) As reversed
             , CharIndex(' ', Reverse(ColumnDescription)) As last_space
        FROM   @your_table
       ) As x;