我不知道该怎么做。在我的桌子上,我有描述与描述代码混合。我需要删除代码描述,只需要描述。描述只是没有首字母缩略词的第一部分(最后的大写字母)。我使用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
答案 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;