SQLwww.2003.com Server把某个字段的数据用一条语句转

2020-03-15 作者:计算机教程   |   浏览(82)

例如数据 列Name复制代码 代码如下:name abcd最后的结果复制代码 代码如下:a*b*c*d*

一 介绍

declare @test table( namevarchar(10))insert into @testvalues('a'),('b'),('c'),('d'); select distinct(select cast(name asvarchar(2)) '*'from @test for xml path(''))as name from @test输出结果:复制代码 代码如下:(4 row(s) affected)name--------------------------------------------------a*b*c*d*(1 row(s) affected)

在笔者支持业务过程中,经常遇到开发咨询replace into 的使用场景以及注意事项,这里做个总结。从功能原理,性能和注意事项上做个说明。

二 原理

2.1 当表中存在主键但是不存在唯一建的时候。表结构复制代码 代码如下:CREATE TABLE `yy` ( `id` bigint(20) NOT NULL, `name` varchar(20) DEFAULT NULL, PRIMARY KEY (`id`)) ENGINE=InnoDB DEFAULT CHARSET=utf8;root@test 02:43:58insert into yy values(1,'abc');Query OK, 1 row affected (0.00 sec)root@test 02:44:25replace into yy values(2,'bbb');Query OK, 1 row affected (0.00 sec)root@test 02:55:42select * from yy; ---- ------ | id | name | ---- ------ | 1 | abc || 2 | bbb | ---- ------ 2 rows in set (0.00 sec)root@test 02:55:56replace into yy values(1,'ccc');Query OK, 2 rows affected (0.00 sec)如果本来已经存在的主键值,那么MySQL做update操作。复制代码 代码如下:### UPDATE test.yy### WHERE### @1=1 /* LONGINT meta=0 nullable=0 is_null=0 */### @2='abc' /* VARSTRING(60) meta=60 nullable=1 is_null=0 */### SET### @1=1 /* LONGINT meta=0 nullable=0 is_null=0 */### @2='ccc' /* VARSTRING(60) meta=60 nullable=1 is_null=0 */如果本来相应的主键值没有,那么做insert 操作 replace into yy values(2,'bbb');复制代码 代码如下:### INSERT INTO test.yy### SET### @1=2 /* LONGINT meta=0 nullable=0 is_null=0 */### @2='bbb' /* VARSTRING(60) meta=60 nullable=1 is_null=0 */# at 623#140314 2:55:42 server id 136403306 end_log_pos 650 Xid = 6090885569

本文由www.2003.com发布于计算机教程,转载请注明出处:SQLwww.2003.com Server把某个字段的数据用一条语句转

关键词: