Hướng dẫn how do i trim a space in mysql? - làm cách nào để cắt bớt một khoảng trống trong mysql?

Có vẻ như không có câu trả lời hiện tại nào thực sự sẽ loại bỏ 100% khoảng trắng từ đầu và cuối chuỗi.

Như đã đề cập trong các bài đăng khác, mặc định TRIM chỉ xóa các khoảng trắng - không phải tab, formFeed, v.v. Một sự kết hợp của TRIM chỉ định các ký tự khoảng trắng khác có thể cung cấp một cải tiến hạn chế, ví dụ: TRIM(BOTH '\r' FROM TRIM(BOTH '\n' FROM TRIM(BOTH '\f' FROM TRIM(BOTH '\t' FROM TRIM(txt))))). Nhưng vấn đề với phương pháp này chỉ là một ký tự duy nhất có thể được chỉ định cho một TRIM cụ thể và các ký tự đó chỉ bị xóa từ đầu và kết thúc. Vì vậy, nếu chuỗi được cắt tỉa là một cái gì đó giống như \t \t \t \t (nghĩa là các không gian thay thế và ký tự tab), sẽ cần nhiều ____22 hơn - và trong trường hợp chung, điều này có thể diễn ra vô thời hạn.

Đối với một giải pháp nhẹ, có thể viết một hàm do người dùng đơn giản (UDF) thực hiện công việc bằng cách lặp qua các ký tự ở đầu và cuối chuỗi. Nhưng tôi sẽ không làm điều đó ... vì tôi đã viết một trình thay thế biểu thức thông thường khá nặng hơn, cũng có thể thực hiện công việc - và có thể hữu ích vì những lý do khác, như được mô tả trong bài đăng trên blog này.

Thử nghiệm

Rextester trực tuyến demo. Cụ thể, hàng cuối cùng cho thấy các phương thức khác không thành công nhưng phương thức biểu thức chính quy thành công.

Function::

-- ------------------------------------------------------------------------------------
-- USAGE
-- ------------------------------------------------------------------------------------
-- SELECT reg_replace(<subject>,
--                    <pattern>,
--                    <replacement>,
--                    <greedy>,
--                    <minMatchLen>,
--                    <maxMatchLen>);
-- where:
-- <subject> is the string to look in for doing the replacements
-- <pattern> is the regular expression to match against
-- <replacement> is the replacement string
-- <greedy> is TRUE for greedy matching or FALSE for non-greedy matching
-- <minMatchLen> specifies the minimum match length
-- <maxMatchLen> specifies the maximum match length
-- (minMatchLen and maxMatchLen are used to improve efficiency but are
--  optional and can be set to 0 or NULL if not known/required)
-- Example:
-- SELECT reg_replace(txt, '^[Tt][^ ]* ', 'a', TRUE, 2, 0) FROM tbl;
DROP FUNCTION IF EXISTS reg_replace;
CREATE FUNCTION reg_replace(subject VARCHAR(21845), pattern VARCHAR(21845),
  replacement VARCHAR(21845), greedy BOOLEAN, minMatchLen INT, maxMatchLen INT)
RETURNS VARCHAR(21845) DETERMINISTIC BEGIN 
  DECLARE result, subStr, usePattern VARCHAR(21845); 
  DECLARE startPos, prevStartPos, startInc, len, lenInc INT;
  IF subject REGEXP pattern THEN
    SET result = '';
    -- Sanitize input parameter values
    SET minMatchLen = IF(minMatchLen < 1, 1, minMatchLen);
    SET maxMatchLen = IF(maxMatchLen < 1 OR maxMatchLen > CHAR_LENGTH(subject),
                         CHAR_LENGTH(subject), maxMatchLen);
    -- Set the pattern to use to match an entire string rather than part of a string
    SET usePattern = IF (LEFT(pattern, 1) = '^', pattern, CONCAT('^', pattern));
    SET usePattern = IF (RIGHT(pattern, 1) = '$', usePattern, CONCAT(usePattern, '$'));
    -- Set start position to 1 if pattern starts with ^ or doesn't end with $.
    IF LEFT(pattern, 1) = '^' OR RIGHT(pattern, 1) <> '$' THEN
      SET startPos = 1, startInc = 1;
    -- Otherwise (i.e. pattern ends with $ but doesn't start with ^): Set start position
    -- to the min or max match length from the end (depending on "greedy" flag).
    ELSEIF greedy THEN
      SET startPos = CHAR_LENGTH(subject) - maxMatchLen + 1, startInc = 1;
    ELSE
      SET startPos = CHAR_LENGTH(subject) - minMatchLen + 1, startInc = -1;
    END IF;
    WHILE startPos >= 1 AND startPos <= CHAR_LENGTH(subject)
      AND startPos + minMatchLen - 1 <= CHAR_LENGTH(subject)
      AND !(LEFT(pattern, 1) = '^' AND startPos <> 1)
      AND !(RIGHT(pattern, 1) = '$'
            AND startPos + maxMatchLen - 1 < CHAR_LENGTH(subject)) DO
      -- Set start length to maximum if matching greedily or pattern ends with $.
      -- Otherwise set starting length to the minimum match length.
      IF greedy OR RIGHT(pattern, 1) = '$' THEN
        SET len = LEAST(CHAR_LENGTH(subject) - startPos + 1, maxMatchLen), lenInc = -1;
      ELSE
        SET len = minMatchLen, lenInc = 1;
      END IF;
      SET prevStartPos = startPos;
      lenLoop: WHILE len >= 1 AND len <= maxMatchLen
                 AND startPos + len - 1 <= CHAR_LENGTH(subject)
                 AND !(RIGHT(pattern, 1) = '$' 
                       AND startPos + len - 1 <> CHAR_LENGTH(subject)) DO
        SET subStr = SUBSTRING(subject, startPos, len);
        IF subStr REGEXP usePattern THEN
          SET result = IF(startInc = 1,
                          CONCAT(result, replacement), CONCAT(replacement, result));
          SET startPos = startPos + startInc * len;
          LEAVE lenLoop;
        END IF;
        SET len = len + lenInc;
      END WHILE;
      IF (startPos = prevStartPos) THEN
        SET result = IF(startInc = 1, CONCAT(result, SUBSTRING(subject, startPos, 1)),
                        CONCAT(SUBSTRING(subject, startPos, 1), result));
        SET startPos = startPos + startInc;
      END IF;
    END WHILE;
    IF startInc = 1 AND startPos <= CHAR_LENGTH(subject) THEN
      SET result = CONCAT(result, RIGHT(subject, CHAR_LENGTH(subject) + 1 - startPos));
    ELSEIF startInc = -1 AND startPos >= 1 THEN
      SET result = CONCAT(LEFT(subject, startPos), result);
    END IF;
  ELSE
    SET result = subject;
  END IF;
  RETURN result;
END;

DROP FUNCTION IF EXISTS format_result;
CREATE FUNCTION format_result(result VARCHAR(21845))
RETURNS VARCHAR(21845) DETERMINISTIC BEGIN
  RETURN CONCAT(CONCAT('|', REPLACE(REPLACE(REPLACE(REPLACE(result, '\t', '\\t'), CHAR(12), '\\f'), '\r', '\\r'), '\n', '\\n')), '|');
END;

DROP TABLE IF EXISTS tbl;
CREATE TABLE tbl
AS
SELECT 'Afghanistan' AS txt
UNION ALL
SELECT ' AF' AS txt
UNION ALL
SELECT ' Cayman Islands  ' AS txt
UNION ALL
SELECT CONCAT(CONCAT(CONCAT('\t \t ', CHAR(12)), ' \r\n\t British Virgin Islands \t \t  ', CHAR(12)), ' \r\n') AS txt;     

SELECT format_result(txt) AS txt,
       format_result(TRIM(txt)) AS trim,
       format_result(TRIM(BOTH '\r' FROM TRIM(BOTH '\n' FROM TRIM(BOTH '\f' FROM TRIM(BOTH '\t' FROM TRIM(txt))))))
         AS `trim spaces, tabs, formfeeds and line endings`,
       format_result(reg_replace(reg_replace(txt, '^[[:space:]]+', '', TRUE, 1, 0), '[[:space:]]+$', '', TRUE, 1, 0))
         AS `reg_replace`
FROM tbl;

Usage:

SELECT reg_replace(
         reg_replace(txt,
                     '^[[:space:]]+',
                     '',
                     TRUE,
                     1,
                     0),
         '[[:space:]]+$',
         '',
         TRUE,
         1,
         0) AS `trimmed txt`
FROM tbl;

Làm cách nào để cắt một khoảng trống trong truy vấn mysql?

Hàm MySQL Trim () Hàm Trim () sẽ loại bỏ các không gian dẫn và dấu từ một chuỗi.The TRIM() function removes leading and trailing spaces from a string.

Làm cách nào để loại bỏ khoảng trống giữa các từ trong mysql?

Nếu bạn có khoảng trắng giữa các chữ cái thì bạn có thể sử dụng hàm thay thế () để loại bỏ khoảng trống.use REPLACE() function to remove spaces.

Làm cách nào để cắt một nhân vật trong mysql?

Sử dụng hàm Trim () với từ khóa hàng đầu để xóa các ký tự ở đầu chuỗi.Trim () cho phép bạn xóa (các) ký tự cụ thể hoặc không gian từ đầu, kết thúc hoặc cả hai đầu của chuỗi.Hàm này lấy các đối số sau: Một từ khóa tùy chọn chỉ định (các) kết thúc để cắt.. TRIM() allows you to remove specific character(s) or space(s) from the beginning, end, or both ends of a string. This function takes the following arguments: An optional keyword that specifies the end(s) to trim.

Làm cách nào để cắt một từ trong mysql?

Chức năng Trim () trong mysql cả hai |Dẫn đầu |Trailing: Dẫn đầu, Trailing hoặc cả hai tùy chọn để hướng dẫn rõ ràng chức năng Trim () để loại bỏ các ký tự không mong muốn dẫn đầu, theo dõi hoặc cả hai và theo dõi từ một chuỗi.Theo mặc định, hàm trim () sử dụng tùy chọn cả hai. in MySQL BOTH | LEADING | TRAILING : LEADING, TRAILING, or BOTH option to explicitly instruct the TRIM() function to remove leading, trailing, or both leading and trailing unwanted characters from a string . By default, the TRIM() function uses the BOTH option.