sql查询结果部分替换

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了sql查询结果部分替换相关的知识,希望对你有一定的参考价值。

如表1为 表2为
1 A 1001~1002 1 1001 节目1
2 B 1001~1003 2 1002 节目2
3 C 1003 3 1003 节目3
...
想将表1中第三个字段替换为表2中第三个字段的内容,如表1中1001~1002换为节目1~节目2
谢谢大家了,请了好多人都说太复杂写不了,我只好导到Excel里做,但太麻烦了又要出错...
我用的是PLSQL这个工具
我是菜鸟,只会很简单的查询,请写全,直接能调出数据就行,谢谢了

有办法的,不过要慎用
先为表1增加两个字段,一个是begin_name 一个是end_name
然后update这两个字段
替换为第三个字段里的前4位和后4位,用substr函数
再然后拼接一下字符串替换一下
最后把新增的两个字段弄掉
----------------补充-------------
具体步骤
1.alter table 表1 add begin_name varchar2(24) NULL;
alter table 表1 add end_name varchar2(24) NULL;
长度自己定义,足够长就行,以后这里要存放表2的字段3
2.update 表1 set begin_name=substr(字段3,1,4);
update 表1 set end_name=substr(字段3,-4,4);
commit;
3.update 表1 a set a.begin_name=(select b.字段3 from 表1 b where a.字 段1=b.字段1);

update 表1 a set a.end_name=(select b.字段3 from 表1 b where a.字段1=b.字段1);
commit;
4.update 表1 set 字段3=begin_name||\'~\'||end_name;
commit;
5.drop那俩字段,这个不用我写了吧?

还有点问题,如果象你第三条纪录,那你就判断一下字段3的长度就行了,这个改起来又不难

我写的很详细了啊,你只要把表1表2和字段名换成你自己数据库里的不就行了吗
参考技术A 如果表1没有 1001~1002 这样的数据就好办了,用plsql很好实现.

这样的话可以写个小程序,两条sql把表1,表2数据查询出来,然后根据表2替换表1,然后写回表1即可...
参考技术B 楼主的意思没整明白,楼上的也没看懂,迷糊了

BigQuery SQL,将 SQL 查询结果附加到现有表

【中文标题】BigQuery SQL,将 SQL 查询结果附加到现有表【英文标题】:BigQuery SQL, append SQL query result to existing table 【发布时间】:2019-01-21 01:32:43 【问题描述】:

我正在使用 Google Cloud Platform BigQuery SQL。

我有一个表 [myTable],我正在编写以下 SQL。我想将此 SQL 的结果附加到 myTable,但到目前为止我所做的只是在每次运行 SQL 时替换 myTable。

谁能告诉我将查询结果附加到现有表的 SQL 语句是什么?

CREATE OR REPLACE myTable  -- myTable will be replace every time...
SELECT
  id,
  parameter1,
  parameter2
FROM 
  third_party_managerd_table

【问题讨论】:

您可以在 bigquery 中使用追加/覆盖设置。 【参考方案1】:

以下是 BigQuery 标准 SQL

#standardSQL
INSERT `project.dataset.yourtable` (id, parameter1, parameter2) 
SELECT
  id,
  parameter1,
  parameter2
FROM 
  `project.dataset.third_party_managerd_table`   

在此处查看有关 BigQuery DML 的更多信息 - https://cloud.google.com/bigquery/docs/reference/standard-sql/dml-syntax

【讨论】:

【参考方案2】:

如果您使用bq 命令行工具运行查询,则可以将其与--noreplace 参数一起使用,以确保将数据附加到预先存在的表中。方法如下:

bq --location=US query --noreplace --destination_table='project.dataset.yourtable' 'SELECT id, parameter1, parameter2 from `project.dataset.third_party_managerd_table`'  

希望这会有所帮助。

【讨论】:

使用INSERT 不涉及任何流媒体 - 因此不会产生任何流媒体费用!请仔细检查并分别更正您的答案。 dml收费详情可以查看cloud.google.com/bigquery/pricing#dml 使用 DML INSERT 将记录添加到表中会产生成本。我已编辑答案以删除“流媒体”一词。 没有插入成本之类的东西 - 您只需为查询处理的字节数付费! 我的意思是 DML 成本。每个 DML 语句都有相关的成本:cloud.google.com/bigquery/pricing#dml 在 INSERT 的情况下与该 INSERT 查询中涉及的 SELECT 查询的成本完全相同 - 所以你仍然应该更正你的答案【参考方案3】:

也可以通过使用新查询创建一个新表并将其插入“myTable”来完成

CREATE OR REPLACE new_info
SELECT
  id,
  parameter1,
  parameter2
FROM 
  third_party_managerd_table;

INSERT INTO myTable
SELECT 
  n.*
FROM 
  new_info n;

【讨论】:

以上是关于sql查询结果部分替换的主要内容,如果未能解决你的问题,请参考以下文章

求sql部分字符替换语句

mySQL怎么批量替换查询结果中的字段值?

SQL批量查询和替换

Mysql中查询一个表,把结果中的NULL替换成0,请写出sql语句

如何用sql语句把查询后的结果那一列数据全部替换。

sql如何把查询到的NULL替换成空值''