Sql 使用REPLACE语句更改结果集中所有字段中的数据
基本上,这个主题。我通过Web界面访问数据库,该界面使用Web表单提交SQL查询。数据库处于只读模式,因此无法使用UPDATE语句。另外,请注意,我需要同时处理所有字段。以下是我尝试过的:Sql 使用REPLACE语句更改结果集中所有字段中的数据,sql,database,replace,syntax,data-manipulation,Sql,Database,Replace,Syntax,Data Manipulation,基本上,这个主题。我通过Web界面访问数据库,该界面使用Web表单提交SQL查询。数据库处于只读模式,因此无法使用UPDATE语句。另外,请注意,我需要同时处理所有字段。以下是我尝试过的: SELECT *, REPLACE((SELECT * FROM sf0314.groups), ':', ';') FROM sf0314.groups WHERE group_id < 1000 服务器回复了以下错误消息: 查询中出错:子查询只能返回一列 我还尝试使用AS来引用主选择中的所有字段,
SELECT *, REPLACE((SELECT * FROM sf0314.groups), ':', ';')
FROM sf0314.groups
WHERE group_id < 1000
服务器回复了以下错误消息:
查询中出错:子查询只能返回一列
我还尝试使用AS来引用主选择中的所有字段,但也没有成功。我了解如何使用REPLACE更新结果集中的一个或多个命名字段。但是,问题是:
如何引用REPLACE语句中的多个all字段?谢谢大家! 你不能。REPLACE函数接受三个字符串参数,但不能接受列表或结果集。 您必须在select语句中列出所有列,然后向每列添加REPLACE函数 范例 编辑评论中的对话摘要 您可以使用RDBMS提供的元数据存储生成字段列表。在大多数数据库引擎中,信息模式包含元数据: MySQL示例: 使用DMV的MSSQL示例:
感谢您的快速回复!我知道标准语法,但我认为有一种方法可以泛指所有字段,例如使用子查询或别名。欢迎使用!我不知道这有什么通用语法。当我遇到类似的问题时,我通常会生成select语句或至少是字段列表。您可以使用INFORMATION_SCHEMA及其表来获取MySQL中的列列表,或T-SQL中的系统视图dmv,或Oracle的系统视图,或任何他们称之为的内容:是的,我在这里看到了一个通过SCHEMA表自动迭代字段的解决方案,但我不确定是否有权访问该解决方案。系统仅通过Web界面提供访问:-。所以,如果我有读取系统表的凭证,并且能够找到它们的名称,那么也许我能够使用这种方法。我真的很喜欢有人提出的concat解决方案,但几分钟后答案就消失了。作者可能删除了它,意识到它不起作用。奇怪的是,因为我在这里找到了类似的解决方案……如果您可以读取表,那么在大多数rdbms中,您可以读取元数据表,也就是系统表。它们将只包含那些表中您可以使用的信息。大多数RDM中的信息模式实现基于视图,视图根据当前用户的权限动态过滤数据。试一试:从MySQLI的INFORMATION_SCHEMA.COLUMNS中选择*我刚刚编辑了原始答案,以涵盖注释中提供的信息。我还添加了一些例子,你可以做到。但是您需要使用动态sql。下面是一个更新示例:concat解决方案的第二个答案去了哪里?它就这样消失了!海报把它删掉了suspect@PeterRing:谢谢!当您说动态SQL时,我假设您指的是存储过程或UDF。“我说得对吗?”弗雷德:谢谢!我喜欢concat解决方案,希望海报会回来。
SELECT
REPLACE(field1, ':', ';') AS field1
REPLACE(field2, ':', ';') AS field2,
REPLACE(field3, ':', ';') AS field3,
REPLACE(field4, ':', ';') AS field4,
FROM
YourTable
SELECT
CONCAT('REPLACE(`', C.COLUMN_NAME, '`, '':'', '';'')')
FROM
information_schema.COLUMNS C
WHERE
C.TABLE_SCHEMA = '[YourDatabaseName]'
AND C.TABLE_NAME = '[YourTableName]'
USE [YourDatabaseName];
SELECT
'REPLACE([' + C.name + '], '':'', '';'')'
FROM
sys.columns C
WHERE
C.object_id = OBJECT_ID('[schema].[table]')