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
感謝您的幫助!
是否有任何可能標記MySQL數據庫(phpmyadmin)中的字符串?如何在MySQL數據庫中標記字符串
我需要一個分割字符串這樣
ID123|this sentence contains 5 tokens
功能到
ID123|1|this
ID123|2|sentence
ID123|3|contains
ID123|4|5
ID123|5|tokens
感謝您的幫助!
字面答案:
你將不得不創建一個存儲過程來分割字符串,然後多次應用它,以便來標記你的字符串:
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];
}
這將是相當容易在PHP本身做。爲什麼你需要在數據庫中做到這一點?如果你的標記化不是微不足道的,就像打破標點符號或圓括號一樣,你最終會趕着一個SQL語句的怪物。 – tadman
不幸的是,我無法使用PHP進行編程。我已經有了這個數據庫,並且知道一些基本的mysql語法。標點符號ecc。沒關係..功能應該簡單地在每個空間之後分割令牌。有任何想法嗎? – KaFra