Hướng dẫn how do i remove double spacing in mysql? - làm cách nào để xóa khoảng cách kép trong mysql?

Tôi không thể tìm thấy câu hỏi này cho MySQL vì vậy đây là:

Tôi cần cắt tất cả các khoảng trống gấp đôi hoặc nhiều không gian thành 1 không gian.

Ví dụ: "& nbsp; & nbsp; & nbsp; nhanh chóng & nbsp; & nbsp; brown & nbsp; & nbsp;

Hàm thay thế (str, "& nbsp; & nbsp;", "") chỉ loại bỏ các khoảng trắng kép, nhưng để lại nhiều không gian khi có nhiều hơn ...

Hỏi ngày 4 tháng 8 năm 2011 lúc 11:30Aug 4, 2011 at 11:30

Hướng dẫn how do i remove double spacing in mysql? - làm cách nào để xóa khoảng cách kép trong mysql?

2

Đây là một thủ thuật cũ không yêu cầu biểu thức thường xuyên hoặc các chức năng phức tạp.

Bạn có thể sử dụng chức năng thay thế 3 lần để xử lý bất kỳ số lượng không gian nào, như vậy:

REPLACE('This is    my   long    string',' ','<>')

becomes:

This<>is<><><><>my<><><>long<><><><>string

Sau đó, bạn thay thế tất cả các lần xuất hiện của '>

REPLACE(
  REPLACE('This is    my   long    string',' ','<>'),
    '><',''
)

This<>is<>my<>long<>string

Sau đó, cuối cùng, một lần thay thế cuối cùng đã chuyển đổi '' trở lại một khoảng trống

REPLACE(
  REPLACE(
    REPLACE('This is    my   long    string',
      ' ','<>'),
    '><',''),
  '<>',' ')

This is my long string

Ví dụ này được tạo trong MySQL (đặt một chọn ở phía trước) nhưng hoạt động bằng nhiều ngôn ngữ.

Lưu ý rằng bạn chỉ cần 3 chức năng thay thế để xử lý bất kỳ số lượng ký tự nào được thay thế.

Đã trả lời ngày 2 tháng 4 năm 2019 lúc 13:38Apr 2, 2019 at 13:38

xytyxxytyxxytyx

3313 Huy hiệu bạc3 Huy hiệu đồng3 silver badges3 bronze badges

6

Ngắn nhất và đáng ngạc nhiên là giải pháp nhanh nhất:

CREATE FUNCTION clean_spaces(str VARCHAR(255)) RETURNS VARCHAR(255)
BEGIN
    while instr(str, '  ') > 0 do
        set str := replace(str, '  ', ' ');
    end while;
    return trim(str);
END

Đã trả lời ngày 12 tháng 4 năm 2013 lúc 12:41Apr 12, 2013 at 12:41

Alkolnalkolnalkoln

5895 Huy hiệu bạc14 Huy hiệu Đồng5 silver badges14 bronze badges

0

Tôi biết câu hỏi này được gắn thẻ MySQL, nhưng nếu bạn đủ may mắn khi sử dụng MariaDB, bạn có thể làm điều này dễ dàng hơn:

SELECT REGEXP_REPLACE(column, '[[:space:]]+', ' ');

Đã trả lời ngày 3 tháng 3 năm 2016 lúc 17:08Mar 3, 2016 at 17:08

Tomconnorstomconnorstomconnors

8658 Huy hiệu bạc11 Huy hiệu đồng8 silver badges11 bronze badges

5

DELIMITER //

DROP FUNCTION IF EXISTS DELETE_DOUBLE_SPACES//
CREATE FUNCTION DELETE_DOUBLE_SPACES ( title VARCHAR(250) )
RETURNS VARCHAR(250) DETERMINISTIC
BEGIN
    DECLARE result VARCHAR(250);
    SET result = REPLACE( title, '  ', ' ' );
    WHILE (result <> title) DO 
        SET title = result;
        SET result = REPLACE( title, '  ', ' ' );
    END WHILE;
    RETURN result;
END//
DELIMITER ;

SELECT DELETE_DOUBLE_SPACES('a    b');

Đã trả lời ngày 13 tháng 8 năm 2012 lúc 19:40Aug 13, 2012 at 19:40

А tắcАртур Курицын

3,5022 huy hiệu vàng15 Huy hiệu bạc10 Huy hiệu đồng2 gold badges15 silver badges10 bronze badges

0

Giải pháp này không thanh lịch lắm nhưng vì bạn không có bất kỳ tùy chọn nào khác:

UPDATE t1 set str = REPLACE( REPLACE( REPLACE( str, "  ", " " ), "  ", " " ), "  ", " " );

Đã trả lời ngày 4 tháng 8 năm 2011 lúc 12:05Aug 4, 2011 at 12:05

không ainobody

10,5K4 Huy hiệu vàng25 Huy hiệu bạc42 Huy hiệu Đồng4 gold badges25 silver badges42 bronze badges

7

Sau khi tìm kiếm, cuối cùng tôi đã viết một chức năng, tức là

chức năng thả nếu tồn tại trim_spaces;

delimiter $$

CREATE DEFINER=`root`@`localhost` FUNCTION `trim_spaces`(`dirty_string` text, `trimChar` varchar(1))
    RETURNS text
    LANGUAGE SQL
    NOT DETERMINISTIC
    CONTAINS SQL
    SQL SECURITY DEFINER
    COMMENT ''
BEGIN
  declare cnt,len int(11) ;
  declare clean_string text;
  declare chr,lst varchar(1);

  set len=length(dirty_string);
  set cnt=1;  
  set clean_string='';

 while cnt <= len do
      set  chr=right(left(dirty_string,cnt),1);           

      if  chr <> trimChar OR (chr=trimChar AND lst <> trimChar ) then  
          set  clean_string =concat(clean_string,chr);
      set  lst=chr;     
     end if;

     set cnt=cnt+1;  
  end while;

  return clean_string;
END
$$
delimiter ;

USAGE:

This<>is<><><><>my<><><>long<><><><>string
5

This<>is<><><><>my<><><>long<><><><>string
6

Đầu ra:

This<>is<><><><>my<><><>long<><><><>string
7

Tham số

This<>is<><><><>my<><><>long<><><><>string
8 cho chức năng có thể bởi bất kỳ ký tự nào đang lặp lại và bạn muốn xóa.

Lưu ý nó sẽ giữ ký tự đầu tiên trong tập hợp lặp lại

Chúc mừng :)

Đã trả lời ngày 21 tháng 9 năm 2011 lúc 13:20Sep 21, 2011 at 13:20

Hướng dẫn how do i remove double spacing in mysql? - làm cách nào để xóa khoảng cách kép trong mysql?

Sakhunzaisakhunzaisakhunzai

13.5K22 Huy hiệu vàng94 Huy hiệu bạc156 Huy hiệu đồng22 gold badges94 silver badges156 bronze badges

1

Đối với MySQL 8+, bạn có thể sử dụng chức năng regexp_replace:

UPDATE `your_table` 
SET `col_to_change`= REGEXP_REPLACE(col_to_change, '[[:space:]]+', ' ');

Đã trả lời ngày 17 tháng 10 năm 2018 lúc 12:58Oct 17, 2018 at 12:58

Hướng dẫn how do i remove double spacing in mysql? - làm cách nào để xóa khoảng cách kép trong mysql?

1

Đây là giải pháp hơi chung: từ

http://www.sqlteam.com/forums/topic.asp?TOPIC_ID=56195&whichpage=1

This<>is<><><><>my<><><>long<><><><>string
0

Đã trả lời ngày 4 tháng 8 năm 2011 lúc 19:43Aug 4, 2011 at 19:43

A. K.A. K.A. K.

31.8K15 Huy hiệu vàng 50 Huy hiệu bạc82 Huy hiệu Đồng15 gold badges50 silver badges82 bronze badges

Nếu chuỗi mà bạn muốn chuyển đổi chỉ bao gồm bảng chữ cái và nhiều số lượng không gian [A-Za-Z]* thì hàm sau sẽ hoạt động. Tôi đã phát hiện ra một mô hình khi các chuỗi như vậy được chuyển đổi thành hex. Dựa trên đó, giải pháp của tôi sau. Không quá thanh lịch, nhưng nó không yêu cầu bất kỳ thủ tục nào.

This<>is<><><><>my<><><>long<><><><>string
1

Đã trả lời ngày 28 tháng 1 năm 2016 lúc 16:20Jan 28, 2016 at 16:20

Nếu bạn đang sử dụng PHP ....

This<>is<><><><>my<><><>long<><><><>string
2

Đã trả lời ngày 4 tháng 4 năm 2017 lúc 1:30Apr 4, 2017 at 1:30

Thực hiện theo chức năng chung của tôi được thực hiện cho MySQL 5.6. Ý định của tôi là sử dụng biểu thức chính quy để xác định không gian, CR và LF, tuy nhiên, nó không được hỗ trợ bởi phiên bản MySQL này. Vì vậy, tôi đã phải lặp qua chuỗi tìm kiếm các ký tự.

This<>is<><><><>my<><><>long<><><><>string
3

Đã trả lời ngày 14 tháng 10 năm 2018 lúc 11:41Oct 14, 2018 at 11:41

AndreandreAndre

53 huy hiệu đồng3 bronze badges

Trong MySQL 8+:

This<>is<><><><>my<><><>long<><><><>string
4

Đã trả lời ngày 10 tháng 1 lúc 20:18Jan 10 at 20:18

Hướng dẫn how do i remove double spacing in mysql? - làm cách nào để xóa khoảng cách kép trong mysql?

Ăn uống bởi một grueaten bởi một grueEaten by a Grue

20.1k10 Huy hiệu vàng80 Huy hiệu bạc101 Huy hiệu Đồng10 gold badges80 silver badges101 bronze badges

Không gian kéo dài trong MySQL là gì?

Theo tiêu chuẩn SQL, không gian dấu vết không được gỡ bỏ khi lưu trữ và truy xuất.Trong MySQL, đây là trách nhiệm của công cụ lưu trữ, trong trường hợp này là Innodb;Từ nhân tạo liên quan, chúng tôi đã đọc: Không gian dấu vết không bị cắt khỏi các cột Varchar.Hóa ra, trách nhiệm là sự đối chiếu.trailing spaces are not removed on storage and retrieval. In MySQL, this is a responsibility of the storage engine, in this case InnoDB; from the related manpage, we read: Trailing spaces are not truncated from VARCHAR columns. It turns out, the responsible is the collation.

MySQL có cho phép không gian không?

Lưu câu trả lời này.Hiển thị hoạt động trên bài viết này.Whitespace được chính thức cho phép theo tiêu chuẩn SQL và MySQL (và tất cả các cơ sở dữ liệu AFAIK) cho phép khoảng trắng trong tình huống này.MySQL (and all databases AFAIK) allow whitespace in this situation.