2011-10-05 411 views
2

有沒有一種方法可以將長字符串放在多行上,以便在屏幕上查看或打印代碼時更易於閱讀?在MySql存儲過程中有很長的字符串

也許我可以更清楚。

具有線條狀

IF ((select post_code REGEXP '^([A-PR-UWYZ][A-HK-Y]{0,1}[0-9]{1,2} [0-9][ABD-HJLNP-UW-Z]{2})|([A-PR-UWYZ][0-9][A-HJKMPR-Y] [0-9][ABD-HJLNP-UW-Z]{2})|([A-PR-UWYZ][A-HK-Y][0-9][ABEHMNPRV-Y]) [0-9][ABD-HJLNP-UW-Z]{2})$') = 0) 

存儲過程想能夠修改字符串,這樣我可以80字符寬度內查看。任何人都有如何做到這一點的想法。

PS:這是英國的郵政編碼

+0

有沒有mysql的作用; HTTP://計算器爲我的最終解決方案[1] [1] - 您可以通過HTML設置 – diEcho

+0

查看多行數據請參閱[是否使用#define相當於存在SQL腳本?]。 COM /問題/ 9238978/SQL的腳本,做最等價的-A-定義,存在 –

回答

7

例如,

-- a very long string in one block 
set my_str = 'aaaabbbbcccc'; 

也可以寫成

-- a very long string, as a concatenation of smaller parts 
set my_str = 'aaaa' 'bbbb' 'cccc'; 

甚至更​​好

-- a very long string in a readable format 
set my_str = 'aaaa' 
      'bbbb' 
      'cccc'; 

注意空間和A/B/C部分之間的線路到底如何是字符串本身的一部分,因爲報價的配售。

另請注意,此處的字符串數據由解析器連接,而不是在查詢執行時。

寫一樣的東西:

-- this is broken 
set my_str = 'aaaa 
       bbbb 
       cccc'; 

會產生不同的結果。

又見 http://dev.mysql.com/doc/refman/5.6/en/string-literals.html

查找「旁邊放置彼此串聯到一個字符串引用字符串」

0

正則表達式你可以把它分解成郵政編碼的正面和背面的組件,然後傾倒一大堆到一個UDF。

這將讓醜陋在一個地方,意味着你只需要修改的代碼一塊當/如果皇家郵政決定改變英國的郵政編碼;-)

像這樣的格式應該做的伎倆:

DELIMITER $$ 


CREATE FUNCTION `isValidUKPostcode`(candidate varchar(255)) RETURNS BOOLEAN  READS SQL DATA 
BEGIN 
    declare back varchar(3); 
    declare front varchar(10); 
    declare v_out boolean; 

    set back = substr(candidate,-3); 
    set front = substr(candidate,1,length(candidate)-3); 
    set v_out = false; 

    IF (back REGEXP '^[0-9][ABD-HJLNP-UW-Z]{2}$'= 1) THEN 
     CASE 
     WHEN front REGEXP '^[A-PR-UWYZ][A-HK-Y]{0,1}[0-9]{1,2} $' = 1 THEN set v_out = true; 
     WHEN front REGEXP '^[A-PR-UWYZ][0-9][A-HJKMPR-Y] $' = 1 THEN set v_out = true; 
     WHEN front REGEXP '^[A-PR-UWYZ][A-HK-Y][0-9][ABEHMNPRV-Y] $' = 1 THEN set v_out = true; 
     END CASE; 
    END IF; 

    return v_out; 
END