【问题标题】:String replace within SQL statementSQL 语句中的字符串替换
【发布时间】:2013-09-22 03:10:41
【问题描述】:

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

例子:

This is a?string

会变成

This is a string

目前我已经知道如何只针对一列进行操作

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

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

【问题讨论】:

  • 在您的更新语句中,您需要指定需要替换的所有列,例如:UPDATE tableName SET column1 = REPLACE(column1,'"','\''),column2 = REPLACE(column2,'"','\'') ...
  • 在你做任何事情之前做一个备份。没有人会不高兴......
  • 感谢您的回答,他们帮了很多忙。至少我知道没有办法使用*UPDATE 所有列。希望这个问题也能帮助其他人。
  • @ppeterka66 感谢您的建议,将其导出为 CSV?
  • @StevenPHP CSV 还不错,但是例如使用 PHPMyAdmin,您可以获得 SQL INSERT 语句,这更容易恢复...

标签: mysql sql


【解决方案1】:

先试后买:

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】:

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

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

【讨论】:

  • 感谢您解决这个问题。在您的示例中,我的? 角色会去" 所在的位置还是`` 所在的位置?
  • @StevenPHP 如果您将? 替换为`, then your REPLACE` 行将是columnNameX = REPLACE(columnNameX, '?', ' ')
  • 非常感谢您的帮助
【解决方案3】:

这是为表中的所有字段创建更新语句的快捷方式。您可以在下面的 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 逻辑即可。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-19
    • 2017-01-04
    • 1970-01-01
    • 1970-01-01
    • 2011-04-03
    相关资源
    最近更新 更多