0

我希望用?表中所有列的单个空格替换所有出现的 。

例子:

This is a?string

会成为

This is a string

目前我已经发现如何只为一列做

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

有没有办法选择并应用于所有列?我不想“尝试”它,因为如果表损坏或删除它会引起很多不安。任何帮助将不胜感激。

4

3 回答 3

3

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

UPDATE tableName
   SET columnName1 = REPLACE(columnName1,'"','\''),
       columnName2 = REPLACE(columnName2,'"','\''),
       columnName3 = REPLACE(columnName3,'"','\''),
       ...
       columnNameN = REPLACE(columnNameN,'"','\'')
于 2013-09-17T15:31:39.150 回答
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
于 2013-09-17T15:35:14.900 回答
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 逻辑即可。

于 2013-09-17T15:51:32.280 回答