SQL在select中查找字符串

时间:2011-02-08 09:36:45

标签: sql sql-server tsql case

我有一个像这样的选择语句:

SELECT ColumnA,
CASE ColumnB = 'England' THEN ...

在THEN语句之后的部分中,我想从ColumnC中获取数字,

e.g。 ColumnC值= ABC 123 DEF,我需要'123'部分。

当'123'总是在字符串中只有2个空格之间时,是否有人知道我可以用来在select中执行此操作的sql代码? (MS SQL)

3 个答案:

答案 0 :(得分:3)

主要关键是您需要使用ColumnC LIKE '% % %',以便在数据不包含两个空格时不会失败。

如果您的号码长度少于20个字符,则可以使用此

SELECT ColumnA,
CASE WHEN ColumnB = 'England' AND ColumnC LIKE '% % %' THEN
   RTRIM(LEFT(REPLACE(STUFF(columnc, 1, PatIndex('% %', columnc), ''), ' ', REPLICATE(' ', 20)),20))
ELSE ....

或者你可以使用这个

SELECT ColumnA,
CASE WHEN ColumnB = 'England' AND ColumnC LIKE '% % %' THEN
    SUBSTRING(
        SUBSTRING(
            ColumnC,
            1,
            CHARINDEX(' ',ColumnC,CHARINDEX(' ', ColumnC)+1)-1),
        1+CHARINDEX(' ', ColumnC),
        LEN(ColumnC))
ELSE ....

答案 1 :(得分:2)

您可以结合使用CHARINDEXSUBSTRING

DECLARE @Test TABLE(ColumnC varchar(100))
INSERT @Test 
VALUES ('ABC 123 DEF')

SELECT SUBSTRING(ColumnC,
          CHARINDEX(' ', ColumnC) + 1, -- first space
          CHARINDEX(' ', ColumnC, CHARINDEX(' ', ColumnC) + 1)
             - CHARINDEX(' ', ColumnC)) -- length from first to second space 
FROM @Test

这对于提供的示例字符串有效。

答案 2 :(得分:0)

SUBSTRING_INDEX(SUBSTRING_INDEX( ColumnC , ' ', 2 ),' ',-1)