修剪列值字符串

时间:2015-08-19 14:46:52

标签: sql sql-server-2008

在SQL Query中,我需要使用我的列的select查询,如下所示的值。 结果必须是第一个空格之后和第一个空格之后的文本('

源列

create Table Test_Table (Column1 Varchar(50))
Insert into Test_Table Values
('0636 KAVITHI (LOC)'),
('0638 SRI KRISHNA (NAT)'),
('0639 SELVAM'),
('0643 GOOD SERVICE (LOC)'),
('0644 FINA CARE EVENT (LOC)')

我需要在第一个''和'('

之间找到字符串

预期结果

KAVITHI
SRI KRISHNA
SELVAM
GOOD SERVICE
FINA CARE EVENT

2 个答案:

答案 0 :(得分:1)

CHARINDEX()可用于查找特定字符的位置。

OUTER APPLY可用于查找空格位置和括号字符,并将它们存储在可以重复使用的位置。

SUBSTRING()可用于查找空格和大括号之间的文本。

编辑 已添加CASE以应对不包含(的值。

SELECT
   SUBSTRING(
       test_table.column1,    -- the field we're searching
       stats.idx_space + 1,   -- starting from the character after the first space
       CASE
           WHEN stats.idx_brace > stats.idx_space
           THEN stats.idx_brace
           ELSE stats.idx_eos
       END
       -
       stats.idx_space        -- for as many characters as there are between the space and the brace
   )
FROM
   test_table
OUTER APPLY
(
   SELECT
       CHARINDEX(' ', test_table.column1)   AS idx_space,  -- position of the first space
       CHARINDEX('(', test_table.column1)   AS idx_brace,  -- position of the first brace
       LEN(test_table.column1)              AS idx_eos     -- position of the end-of-string
)
    AS stats

编辑: 根据要求提供单个“行”。

请注意,将此强制为单行确实会使读取,维护和调整变得更加困难。 APPLY最强的用例之一是保持DRY (不要重复自己)原则。

此查询多次重复几个部分: - find the first space重复2次 - find the first brace重复3次

SELECT
   SUBSTRING(
       test_table.column1,
       CHARINDEX(' ', test_table.column1) + 1,
       CASE
           WHEN CHARINDEX('(', test_table.column1) > CHARINDEX(' ', test_table.column1)
           THEN CHARINDEX('(', test_table.column1)
           ELSE LEN(test_table.column1)
       END
       -
       CHARINDEX('(', test_table.column1)
   )
FROM
   test_table

答案 1 :(得分:1)

另一种不使用OUTER APPLY的方法。

function foto_start(imageSrc){
    document.getElementById('1').src=imageSrc;
}

<img id="1" onmouseover="foto_start('http://example.com/image2.jpg')" onmouseout="foto_stop()" src="http://example.com/image1.jpg" />

输出

SELECT CASE WHEN Column1 LIKE '%(%' 
            THEN SUBSTRING(RIGHT(Column1,LEN(Column1)-CHARINDEX(' ',Column1)),0,
                 CHARINDEX('(',RIGHT(Column1,LEN(Column1)-CHARINDEX(' ',Column1)),0)) 
            ELSE RIGHT(Column1,LEN(Column1)-CHARINDEX(' ',Column1)) 
            END AS Trimmed
FROM Test_Table

SQL小提琴:http://sqlfiddle.com/#!3/69dd1/20/0