我在文本字段中有一些數據用換行符分隔。對於每一行,我想得到該行中最長行的長度。MySQL查詢來計算文本字段中的最長行
如果例如一行含有以下數據
the cat\nsat on the\nmat
然後我想要一個查詢以返回圖10中,最長行的長度「坐在」。
我在文本字段中有一些數據用換行符分隔。對於每一行,我想得到該行中最長行的長度。MySQL查詢來計算文本字段中的最長行
如果例如一行含有以下數據
the cat\nsat on the\nmat
然後我想要一個查詢以返回圖10中,最長行的長度「坐在」。
那麼這裏是一個想法...
爲了方便閱讀,在這種解決方案我已經取代「\ n」與「|」。
請記住,僅僅因爲你'可以',它並不遵循你'應該'!
SET @string = "the cat|sat on the|mat";
SELECT * FROM ints;
+---+
| i |
+---+
| 0 |
| 1 |
| 2 |
| 3 |
| 4 |
| 5 |
| 6 |
| 7 |
| 8 |
| 9 |
+---+
SELECT SUBSTRING_INDEX(SUBSTRING_INDEX(@string,"|",i),"|",-1)x FROM ints;
+------------+
| x |
+------------+
| |
| the cat |
| sat on the |
| mat |
| mat |
| mat |
| mat |
| mat |
| mat |
| mat |
+------------+
SELECT LENGTH(SUBSTRING_INDEX(SUBSTRING_INDEX(@string,"|",i),"|",-1))x FROM ints ORDER BY x DESC LIMIT 1;
+------+
| x |
+------+
| 10 |
+------+
您的答案或Mani Deep的答案都不允許每行有任意數量的換行符,但您的答案更接近標記。你已經足夠讓我做我想做的事情,但是我認爲你是評論'只是因爲你可以,並不意味着你應該'在這種情況下是正確的。 – Dom
那麼你可以儘可能經常地跨入int表,但是是的,這個觀點依然存在。 – Strawberry
檢查此sqlfiddle
CREATE TABLE tablename (
id INT,
name VARCHAR(50));
INSERT INTO tablename VALUES
(1, 'the cat\nsat on the\nmat'),
(2, 'd');
查詢:
SELECT
max(length(SUBSTRING_INDEX(SUBSTRING_INDEX(tablename.name, '\n', numbers.n), '\n', -1))) name
FROM
(SELECT 1 n UNION ALL SELECT 2
UNION ALL SELECT 3 UNION ALL SELECT 4) numbers INNER JOIN tablename
ON CHAR_LENGTH(tablename.name)
-CHAR_LENGTH(REPLACE(tablename.name, '\n', ''))>=numbers.n-1
ORDER BY
id, n
結果:
name
10
參考:here
我不認爲這可以通過單純的SQL來完成。你應該使用編程。 – ankur140290
我同意@ Ankur140290,尤其是因爲在mysql中沒有split()函數 – PierrOz
您可以爲此創建一個用戶函數,例如,請參閱http://stackoverflow.com/questions/17942508/sql-split-values-to-multiple -rows – AlecTMH