我希望用?
表中所有列的单个空格替换所有出现的 。
例子:
This is a?string
会成为
This is a string
目前我已经发现如何只为一列做
UPDATE tableName
SET columnName = REPLACE(columnName,'"','\'')
有没有办法选择并应用于所有列?我不想“尝试”它,因为如果表损坏或删除它会引起很多不安。任何帮助将不胜感激。
您不能自动为所有列执行此操作,您需要单独列出列,但您仍然可以使用一个语句来执行此操作:
UPDATE tableName
SET columnName1 = REPLACE(columnName1,'"','\''),
columnName2 = REPLACE(columnName2,'"','\''),
columnName3 = REPLACE(columnName3,'"','\''),
...
columnNameN = REPLACE(columnNameN,'"','\'')
先试后买:
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
这是为表中的所有字段创建更新语句的快捷方式。您将在下面的 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 逻辑即可。