特性select语句中使用字符串链接获取字段值失败

Posted 反复思考,反复实践

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了特性select语句中使用字符串链接获取字段值失败相关的知识,希望对你有一定的参考价值。

坑1

在一个多行的表中,想把其中的一个字段值拿出来,组成一个字符串供后面使用。

按照以往,自己就如以下这么写了:

declare @sql varchar(8000)
set @sql='insert into XXX values('
select @[email protected]+''','''+ field from YY

然后没有得到想要的所有行的字符串,第一行之后就没有了。

排查问题:

  1. 自己仔细查看了数据,并打印出来,发现这个字段有换行。

    于是自己又用replace把字段field的换行符,结果依然如此,也是,有的行里面就没有换行符,自己也做了验证,那么肯定不是这个原因了。

  2. 自己猜测是字段类型的原因,查了field的字段类型:NVarChar(max),很厉害,于是自己在写的时候就转换了一次,使用了cast,选择了一个合适的字符串长度,改造之后sql如下:

declare @sql varchar(8000)
set @sql='insert into XXX values('
select @[email protected]+''','''+ cast(field as nvarchar(1000)) from YY

搞定!字符串完整的获取了所有的行的字段值。

坑2

搞定中间数据完了,之后呢,自己需要复制查询结果到excel,不能有换行符,有换行符,excel就换行不讲道理的换行。

于是,就在前面的基础上,给field字段加上replace处理,结果又只能获取第一行的数据了。

我试了两种方式,在转换之前和转换之后都是不行的。

--转换之前
cast(replace(replace(field,char(10),''),char(13),'')  as nvarchar(1000))
--转换之后
replace(replace(cast(field  as nvarchar(1000)),char(10),''),char(13),'')

这个坑,自己先搁着,毕竟convert还没有用呢,自己草草的把这个数据插入临时表的时候自己用了replace去掉了,然后再字符串链接的时候,从临时表中拿数据,就解决了。

以上是关于特性select语句中使用字符串链接获取字段值失败的主要内容,如果未能解决你的问题,请参考以下文章

ORACLE中select语句中获取字段的数据类型

MySql中如何在一个字段(值为字符串)中查找某一个字符

动态执行SQL语句,拼接字符串,select中带有一个变量

在oracle中,select语句查询字段中非纯数字值

ACCESS中提示“不允许在select into语句中使用多值字段”

access不允许在select into 语句中使用多值字段