我有这个问题:
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。
有什么建议吗?
答案 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'
它做的是
.
由于我错过了TS要求sql-server查询,如果有人在MySQL上寻找这样的查询,上面的例子应该可行。至于sql-server,其他答案以及对这个答案的评论的TS的修改查询也应该有所帮助。祝你好运。