在sql语句中为varchar值添加双引号

Adding double quotes to varchar values in sql statement


问题

嗨,

如何根据数值在输出结果中添加双引号?

我已经试过了,这很有效:select quotename(Customer_Name,'""')

然而,我不想为每一列放。但是根据查询输出的值,如果值中包含字母,那么结果应该加上引号,如果结果是数字,则不需要引号。

这在sql中是否可以实现?

答案1

你好 ,

非常感谢你在这里发帖。

请参考以下内容,并检查它是否对你有帮助。

 CREATE TABLE Customer
    (
    Customer_Name varchar(50) NOT NULL
    );   
 GO   
 INSERT INTO Customer values
 ('DB Manager12'),
 ('IT Director'),
 ('3346');

 select IIF(isnumeric(Customer_Name)=1,Customer_Name,quotename(Customer_Name,char(34))) from testdb.dbo.Customer

BCP命令如下。

 BCP "select IIF(isnumeric(Customer_Name)=1,Customer_Name,quotename(Customer_Name,char(34))) from testdb.dbo.Customer" queryout "d:\test.txt" -c -t","  -T

输出。
44998-2.png

Best regards
Melissa

11月热点问题 -- 事务日志满了怎么办?
11月热点问题 -- 如何将Profiler跟踪转换为SQL Server表


在一些记录的案例中似乎效果不好:

 insert into Customer values
 ('.'),
 ('+'),
 ('-'),
 ('$')

答案2

是为了导出数据吗?那就使用导入/导出向导,它有一个选项,就是将文本嵌入双引号中的功能

谢谢你的回答。我不能使用SSIS,需要使用一个控制台c#应用程序。

我正在尝试使用BCP

答案3

但取决于查询输出的值

这对我来说是没有意义的。你不想把你的决定建立在一个列的值上,而是建立在这个列本身上。想象一下这样的情况:你有一个描述列,它被打成了VARCHAR。在你的结果集的第一行,该列的值是 10 ,而第二行的值是 Bike 。你不希望对第二行进行双引号,而不对第一行进行双引号,因为这将扰乱解析数据的尝试。如果这些数据被传递给其他的代码,它将不得不处理所有列中的双引号,即使该列不是整体,因为引号有可能在那里,也有可能不在。

在我看来,正确的做法是看一下列的类型。如果它是文本的,那么就用双引号包住它。行中的基本值并不相关。当然,对于NULL,你可能只是让它保持NULL。


答案4

也可以试试这样的东西:

 select case when try_cast(MyColumn1 as float) is not null then MyColumn1 else quotename(MyColumn1, '"') end
 from MyTable

也请看 ISNUMERIC

但你也可以在C#中对数据进行格式化。


答案5

如果你想用BCP导出数据,并希望某些列被引用,这可以通过格式文件实现。不过所有行的结果都是一样的。

我的网站上有一篇关于使用批量加载和格式文件的文章; http://www.sommarskog.se/bulkload.html