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

坑1

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

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

declare @sql varchar(8000)
set @sql=‘insert into XXX values(‘
select @sql=@sql+‘‘‘,‘‘‘+ field from YY

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

排查问题:

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

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

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

declare @sql varchar(8000)
set @sql=‘insert into XXX values(‘
select @sql=@sql+‘‘‘,‘‘‘+ 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去掉了,然后再字符串链接的时候,从临时表中拿数据,就解决了。

时间: 2024-12-27 22:07:51

【特性】select语句中使用字符串链接获取字段值失败的相关文章

sql的基础语句-select语句中出现的操作符号

2. select语句中出现的操作符号 2.1 合并操作符select a.ename||' '||to_char(sal) from emp a; 2.2 消除重复的行 select distinct deptno from emp; 2.3 空格.空串.null的区别 select ascii(' '),ascii(null),ascii('') from dual; 区别:  从显式上看,空串跟null在数据库中存储的值是一样的,但是NULL可以赋给任何数据类型,而空串只能赋给字符串类型

SQL SERVER SELECT语句中加锁选项的详细说明 [转]

SQL Server提供了强大而完备的锁机制来帮助实现数据库系统的并发性和高性能.用户既能使用SQL Server的缺省设置也可以在select 语句中使用“加锁选项”来实现预期的效果. 本文介绍了SELECT语句中的各项“加锁选项”以及相应的功能说明. 功能说明: NOLOCK(不加锁) 此选项被选中时,SQL Server 在读取或修改数据时不加任何锁. 在这种情况下,用户有可能读取到未完成事务(Uncommited Transaction)或回滚(Roll Back)中的数据, 即所谓的“

【MYSQL】update/delete/select语句中的子查询

update或delete语句里含有子查询时,子查询里的表不能在update或是delete语句中,如含有运行时会报错:但select语句里含有子查询时,子查询里的表可以在select语句中. 如:把总成绩小于100的学生名称修改为天才 select stu_id from score group by stu_id having sum(grade)<100; #查询总成绩小于100的学生IDupdate students set name='天才' where id in (select s

在 case 语句中使用字符串

在 case 语句中使用字符串 非常遗憾 Delphi 的 case 语句不支持字符串, 但我觉得这也可能是基于效率的考量;如果非要在 case 中使用字符串, 也不是不可以变通, 这里提供了五种方法. 本例效果图: 代码文件: unit Unit1; interface uses   Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,   Dialogs, StdCtrls, ExtCtrls;

[讲解]sql except和intersect运算符(比拟两个或多个select语句的结果并前去非重复值)

图 1 UNION 中若有重复的行,会被移除,只留下一个 1.简介 EXCEPT和INTERSECT运算符使您可以比较两个或多个SELECT语句的结果并返回非重复值. 2.区别 EXCEPT运算符返回由EXCEPT运算符左侧的查询返回.而又不包含在右侧查询所返回的值中的所有非重复值. INTERSECT返回由INTERSECT运算符左侧和右侧的查询都返回的所有非重复值. 3.注意事项 (1).使用EXCEPT或INTERSECT比较的结果集必须具有相同的结构.它们的列数必须相同,并且相应的结果集

SQL语句中count(1)count(*)count(字段)用法的区别

SQL语句中count(1)count(*)count(字段)用法的区别 在SQL语句中count函数是最常用的函数之一,count函数是用来统计表中记录数的一个函数, 一. count(1)和count(*)的区别 1. count(1)和count(*)的作用: 都是检索表中所有记录行的数目,不论其是否包含null值. 2. 区别:但是count(1)比count(*)效率更高 二 . count(字段)与count(1)和count(*)的区别 count(字段)的作用是检索表中的这个字段

mysql.select语句里怎样批量的在一个字段前面加指定字符

mysql.select语句里怎样批量的在一个字段前面加指定字符?也就是update语句怎样写才能实现? 假设现在需要更新的字段是name,对应的值是value,现在要将字符"B"批量的加到原来值之前,变成Bvalue,请问update语句怎么写? update tablename set name=concat("B",name); mysql.select语句里怎样批量的在一个字段前面加指定字符

java7 switch语句中使用字符串的背后原理

先看下代码及反编译后的代码: /**  * @author doctor  *  * @time 2015年3月28日 下午3:26:06  */ public class StringForSwitch { @Rule public ExpectedException ex = ExpectedException.none(); @Test public void test_string_switch() { String result=""; switch ("docto

JDK7的新特性——switch语句可以用字符串语句

1 //jdk7.0中switch可以使用字符串做条件 2 public class TestSwitch02 { 3 public static void main(String[] args){ 4 String a = "向良峰"; 5 6 switch(a){//JDK 7的新特性,表达式可以是字符串! 7 case "哔哩哔哩": 8 System.out.println("输入的是哔哩哔哩"); 9 break; 10 case &q