2014-03-13 37 views
0

空調,我有這個疑問:SQL查詢的錯誤

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。

有什麼建議嗎?

回答

3

嘗試:

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

正是我需要的。謝謝! –

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); 
+0

是的,除了當測試變量的值是 'AA112' 的錯誤。我的一些ID有一段時間,有些則沒有。 tableID更改並可以返回沒有句點的ID。 –

+0

我已經更新爲帳戶的情況下,當沒有期間 – 2014-03-13 17:53:59

+0

這也適用,謝謝! –

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服務器其他答案和TS的修改查詢這個答案的評論應該也有幫助。祝你好運。

+0

我正在使用上面的左邊。問題是,當使用left並且有一個不包含'。'的字符串時由於返回的長度無效,所以會返回錯誤。這也是SUBSTRING的一個問題。 –

+0

@BradGermain是的,但你也使用'CHARINDEX'嘗試'LOCATE'。但是,我現在正在更新我的答案。 :) – majidarif

+0

@BradGermain更新了我的答案。 – majidarif

2

試試這個:

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

與@albe基本相同。感謝您的答覆! –