backslash and Update

2005-12-30 Thread Jerry Swanson
I have 290 records in the database with backslashes. I want to remove the
backslashes.  Why the query below doesn't remove backslashes?

update name set first_name = REPLACE(first_name,'','') where first_name
like '%%';


Re: backslash and Update

2005-12-30 Thread Danny Stolle

Hi,

What you perhaps could use is the REGEXP usage in your where clause.
Try this:
update name set first_name=replace(first_name, '\\', '') where 
first_name regexp '';


The fun thing is that when you put '\\' instead of the '' after the 
regexp function it doesn't work. But this sure does.


Before you use the update, create a selection first with the regexp 
function; if that works, your update will do fine.


Hope this little info helps you :-)

Danny

Jerry Swanson wrote:

I have 290 records in the database with backslashes. I want to remove the
backslashes.  Why the query below doesn't remove backslashes?

update name set first_name = REPLACE(first_name,'','') where first_name
like '%%';



--
MySQL General Mailing List
For list archives: http://lists.mysql.com/mysql
To unsubscribe:http://lists.mysql.com/[EMAIL PROTECTED]



Re: backslash and Update

2005-12-30 Thread Michael Stassen

Danny Stolle wrote:

Hi,

What you perhaps could use is the REGEXP usage in your where clause.
Try this:
update name set first_name=replace(first_name, '\\', '') where 
first_name regexp '';


The fun thing is that when you put '\\' instead of the '' after the 
regexp function it doesn't work. But this sure does.


Before you use the update, create a selection first with the regexp 
function; if that works, your update will do fine.


Hope this little info helps you :-)

Danny

Jerry Swanson wrote:


I have 290 records in the database with backslashes. I want to remove the
backslashes.  Why the query below doesn't remove backslashes?

update name set first_name = REPLACE(first_name,'','') where 
first_name

like '%%';


You should be able to do this with either LIKE or REGEXP.  The problem, I think, 
was too many backslashes in the REPLACE part of the UPDATE.  That is,


  REPLACE(first_name,'','')

tells mysql to replace double backslashes (\\) with nothing, but won't have any 
effect on single backslashes (\).  I believe this is because the LIKE or REGEXP 
pattern is parsed twice, while the REPLACE pattern is parsed once, as the 
following example shows:


  CREATE TABLE bst (id INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
txt CHAR(32));

  INSERT INTO bst (txt)
  VALUES ('Here\'s some text.'), ('Here is some more.'),
 ('This has a \\ in it.'), ('This one has 2  in the middle.');

  SELECT * FROM bst;
  ++--+
  | id | txt  |
  ++--+
  |  1 | Here's some text.|
  |  2 | Here is some more.   |
  |  3 | This has a \ in it.  |
  |  4 | This one has 2 \\ in the middle. |
  ++--+
  4 rows in set (0.00 sec)

  SELECT * FROM bst WHERE txt LIKE '%%';
  ++--+
  | id | txt  |
  ++--+
  |  3 | This has a \ in it.  |
  |  4 | This one has 2 \\ in the middle. |
  ++--+
  2 rows in set (0.00 sec)

  mysql SELECT * FROM bst WHERE txt REGEXP '';
  ++--+
  | id | txt  |
  ++--+
  |  3 | This has a \ in it.  |
  |  4 | This one has 2 \\ in the middle. |
  ++--+
  2 rows in set (0.01 sec)

  UPDATE bst SET txt = REPLACE(txt, '', '');
  Query OK, 1 row affected (0.00 sec)
  Rows matched: 4  Changed: 1  Warnings: 0

  SELECT * FROM bst;
  +++
  | id | txt|
  +++
  |  1 | Here's some text.  |
  |  2 | Here is some more. |
  |  3 | This has a \ in it.|
  |  4 | This one has 2  in the middle. |
  +++
  4 rows in set (0.00 sec)

  UPDATE bst SET txt = REPLACE(txt, '\\', '');
  Query OK, 1 row affected (0.00 sec)
  Rows matched: 4  Changed: 1  Warnings: 0

  SELECT * FROM bst;
  +++
  | id | txt|
  +++
  |  1 | Here's some text.  |
  |  2 | Here is some more. |
  |  3 | This has a  in it. |
  |  4 | This one has 2  in the middle. |
  +++
  4 rows in set (0.00 sec)

Michael



--
MySQL General Mailing List
For list archives: http://lists.mysql.com/mysql
To unsubscribe:http://lists.mysql.com/[EMAIL PROTECTED]