2016-02-18 31 views
0

是否有任何可能標記MySQL數據庫(phpmyadmin)中的字符串?如何在MySQL數據庫中標記字符串

我需要一個分割字符串這樣

ID123|this sentence contains 5 tokens 

功能到

ID123|1|this 
ID123|2|sentence 
ID123|3|contains 
ID123|4|5 
ID123|5|tokens 

感謝您的幫助!

+0

這將是相當容易在PHP本身做。爲什麼你需要在數據庫中做到這一點?如果你的標記化不是微不足道的,就像打破標點符號或圓括號一樣,你最終會趕着一個SQL語句的怪物。 – tadman

+0

不幸的是,我無法使用PHP進行編程。我已經有了這個數據庫,並且知道一些基本的mysql語法。標點符號ecc。沒關係..功能應該簡單地在每個空間之後分割令牌。有任何想法嗎? – KaFra

回答

0

字面答案:

你將不得不創建一個存儲過程來分割字符串,然後多次應用它,以便來標記你的字符串:

CREATE FUNCTION SPLIT_STR(
x VARCHAR(255), 
delim VARCHAR(12), 
pos INT 
) 
RETURNS VARCHAR(255) 
RETURN REPLACE(SUBSTRING(SUBSTRING_INDEX(x, delim, pos), 
LENGTH(SUBSTRING_INDEX(x, delim, pos -1)) + 1), 
delim, ''); 

以此爲這樣的:SELECT SPLIT_STR(string, delimiter, position)

但是,應該指出的是,這將需要大量的手動生成循環和檢查才能完全實現,因爲MySQL沒有可以使用真正的字符串操作函數來構建,所以您必須完全推出自己的代碼才能這樣做,並且在此過程中使您的數據層難以維護,而且您的調試工作噩夢般。因此,這對您的問題來說是一個非常糟糕的解決方案,但是這是您所問問題的文字答案。

更好的答案:

使用腳本語言插入之前執行字符串編輯任務到數據庫中。通常字符串操作和邏輯不應該發生在數據層中。

在PHP:

$prefix = 'ID123|'; 
$string = 'ID123|this sentence contains 5 tokens'; 
$res = explode(' ', ltrim($prefix, NULL, $string)); 
foreach (&$res as $token) { 
    $token = $prefix . $token; 
} 

在Javascript中(如果你使用的Node.js或東西):

var prefix = "ID123|"; 
var str = "this sentence contains 5 tokens"; 
var res = str.split(prefix).pop().split(" "); 
for (i=0;i<res.length;i++) { 
    res[i] = prefix+res[i]; 
} 
相關問題