SQL语句中的字符串替换

时间:2013-09-17 15:28:51

标签: mysql sql

我希望将所有出现的?替换为表中所有列的空白空间。

示例:

This is a?string

会变成

This is a string

目前我已经找到了如何只为一个列进行操作

UPDATE tableName
   SET columnName = REPLACE(columnName,'"','\'')

有没有办法选择并应用于al列?我不希望“尝试”它,好像表被破坏或删除它会导致很多不安。任何帮助将不胜感激。

3 个答案:

答案 0 :(得分:3)

您无法自动为所有列执行此操作,您需要单独列出列,但您仍然可以使用一个语句执行此操作:

UPDATE tableName
   SET columnName1 = REPLACE(columnName1,'"','\''),
       columnName2 = REPLACE(columnName2,'"','\''),
       columnName3 = REPLACE(columnName3,'"','\''),
       ...
       columnNameN = REPLACE(columnNameN,'"','\'')

答案 1 :(得分:3)

购买之前先试试:

SELECT Replace(columnName1, '?', ' ')
     , Replace(columnName2, '?', ' ')
     , Replace(columnName3, '?', ' ')
FROM   your_table

如果您对结果感到满意,请更新

UPDATE your_table
SET    columnName1 = Replace(columnName1, '?', ' ')
     , columnName2 = Replace(columnName2, '?', ' ')
     , columnName3 = Replace(columnName3, '?', ' ')

更新

您可能希望限制查询的效果。目前它将适用于表格中的每一行,无论列值中是否存在任何问号。

因此,您应该考虑添加一个检查存在的WHERE子句。

SELECT Replace(columnName1, '?', ' ')
FROM   your_table
WHERE  Locate('?', columnName1) > 0

答案 2 :(得分:0)

这是为表中的所有字段创建更新语句的快捷方式。您将在下面的SQL语句的WHERE子句中填写表名和数据库名,然后运行代码,它将返回一个您可以复制然后运行的SQL语句。

对于表中每个字段的单独更新语句:

SELECT concat('UPDATE ', TABLE_NAME, ' SET ', COLUMN_NAME, ' = REPLACE(', COLUMN_NAME, ', ''?'', '''')')
FROM INFORMATION_SCHEMA.COLUMNS c
WHERE TABLE_NAME = 'table_name' AND TABLE_SCHEMA = 'database_name';

对于表中每个字段的单个更新语句。放UPDATE table_name然后粘贴此SQL语句的结果。

SELECT concat('SET ', COLUMN_NAME, ' = REPLACE(', COLUMN_NAME, ', ''?'', ''''),')
FROM INFORMATION_SCHEMA.COLUMNS c
WHERE TABLE_NAME = 'table_name' AND TABLE_SCHEMA = 'database_name';

如果您只想更新char或varchar字段,可以将其添加到WHERE子句中:

 AND DATA_TYPE in ('char', 'varchar')

要为数据库中的每个表执行此操作,只需从WHERE子句中删除TABLE_NAME逻辑。