2017-02-17 29 views
0

我查看了答案並找到了我正在查找的內容,但是我無法將其適用於我的查詢。我如何將數字分成3個部分除以MYSQL中的「 - 」

我有一個看起來像這樣的數字。 1110010001.我想把它看起來像這樣。 111-001-0001(或任何其他分頻器)。

我知道如何獲得111-0010001,但任何人都可以告訴我如何將下面的代碼修改爲返回111-001-0001嗎?

SELECT  
CASE 
WHEN floor(substr(p.rrnhs, 3,1)) > 0 
THEN CONCAT_WS('-', SUBSTRING(p.rrnhs, 1, 3), SUBSTRING(p.rrnhs, 3, LENGTH(p.rrnhs))) 
ELSE CONCAT_WS('-', SUBSTRING(p.rrnhs, 1, 3), SUBSTRING(p.rrnhs, 4, 3ENGTH(p.rrnhs))) 
END AS 'NHSNo', 

感謝,

邁克

回答

1

3段,只需添加另一個子段

SELECT CONCAT_WS('-', SUBSTRING(p.rrnhs, 1, 3), 
       SUBSTRING(p.rrnhs, 4, 3),SUBSTRING(p.rrnhs, 7, LENGTH(p.rrnhs))) FROM T 

Test

+1

啊!我確實嘗試過,但無法做到。這雖然工作得很好。謝謝! –

1

你也可以這樣做

select concat(substring('1110010001',1,3), 
'-',substring('1110010001',4,3),'-',substring('1110010001',7)) this; 
0

不是最好的代碼,但也許你可以找到有用的。我只是做了一個存儲過程,以動態的方式實現你的目標。

利用此存儲過程,你可以參數化:

  • 字符串分割
  • 字符數在每分裂塊
  • 分裂的塊數。

    DELIMITER $$ 
    
    CREATE PROCEDURE `stringSplitter`(IN stringToSplit TEXT, IN numberOfCharactersSplitted INT, IN numberOfSplits INT) 
    BEGIN 
    
    DECLARE iteration INT DEFAULT 1; 
    DECLARE indexToSplit INT DEFAULT 1; 
    DECLARE maxIterations INT; 
    DECLARE result TEXT;    
    DECLARE size INT; 
    
    SET maxIterations = LENGTH(stringToSplit)/numberOfCharactersSplitted; 
    SET size = LENGTH(stringToSplit); 
    SET indexToSplit = 1; 
    SET result = ""; 
    
    WHILE (iteration <= numberOfSplits AND indexToSplit < size) DO  
        SET result = CONCAT(result, substring(stringToSplit,indexToSplit,numberOfCharactersSplitted), '_'); 
        SET indexToSplit = indexToSplit + numberOfCharactersSplitted; 
        SET iteration = iteration + 1; 
    END WHILE; 
    
    SET result = CONCAT(result, substring(stringToSplit,indexToSplit,size)); 
    
    SELECT result; 
    
    END$$ 
    
    DELIMITER ; 
    

當心!我沒有測試過那麼多,但我認爲你可以毫無問題地使用它。

相關問題