SQL查询以错误为条件

时间:2014-03-13 17:46:48

标签: sql sql-server

我有这个问题:

select "ID" =
CASE
    WHEN LEN(LEFT(ID, (charindex('.', ID)-1))) > 1 THEN LEFT(ID, (charindex('.', ID)-1))
    ELSE ID
END
From table
where tableID = '111'

ID类似AA11.1或BB22,有些有句号而有些没有。我希望在句点之后截断所有字符,但是在没有句点的情况下它会出错。我希望保留没有句号的ID。

所以对于AA11.1我想要返回AA11而对于BB22我想要返回BB22。

有什么建议吗?

4 个答案:

答案 0 :(得分:3)

尝试:

CASE
    WHEN charindex('.', ID) > 1 THEN LEFT(ID, (charindex('.', ID)-1))
    ELSE ID
END

答案 1 :(得分:2)

试试这个:

select ID =  
CASE WHEN charindex('.', ID) > 1 THEN LEFT(ID, (charindex('.', ID)-1))
    ELSE ID
END

答案 2 :(得分:1)

你我会这样做。

DECLARE @test VARCHAR(10) = 'AA110'
SELECT LEFT(@test, CASE WHEN CHARINDEX('.', @test) = 0 THEN LEN(@test)
                        ELSE CHARINDEX('.', @test) - 1
                   END);


SET @test = 'AA110.12'
SELECT LEFT(@test, CASE WHEN CHARINDEX('.', @test) = 0 THEN LEN(@test)
                        ELSE CHARINDEX('.', @test) - 1
                   END);

答案 3 :(得分:1)

更简单的查询将是

SELECT IF('AA11.1' LIKE '%.%', LEFT('AA11.1', LOCATE('.','AA11.1')-1), 'AA11.1') AS tmp

所以对你来说就是

SELECT IF(ID LIKE '%.%', LEFT(ID, LOCATE('.',ID)-1), ID)
From table
where tableID = '111'

它做的是

  • 检查ID是否包含.
  • 如果是,那么它使用LEFT。
  • 如果没有,那么它会使用ID本身。

由于我错过了TS要求sql-server查询,如果有人在MySQL上寻找这样的查询,上面的例子应该可行。至于sql-server,其他答案以及对这个答案的评论的TS的修改查询也应该有所帮助。祝你好运。