首页 > 解决方案 > 传递相同的函数但输出不同

问题描述

当通过字符串'ABC'在函数中传递值以获得正确的输出但通过变量传递时得到不正确的输出时,@Detail 面临问题。我做错了什么。

 DECLARE @Detail varchar(4000)

 SELECT @Detail = detail FROM table1
 select @Detail
 
select * from dbo.SDF_SplitString(@Detail,' ',88)

输出不正确

在此处输入图像描述

select * from dbo.SDF_SplitString(' 11/13/2019 12:15:0 11/13/2019 12:15:0 11/13/2019 14:30:0 BOM GOP SG  438   24A MR Kamleshwar  Prasad  4',' ',88)
 

正确的输出

在此处输入图像描述

标签: sqlsql-server

解决方案


好的,所以我让你运行的查询显示之间的字符12:15:0 11/13/2019是 TAB(ascii 字符 9),而不是空格(ascii 字符 32)

这就是你得到你所做的输出的原因;您也许应该考虑在拆分之前用空格替换制表符,或者升级您的拆分功能,以便您可以将多个字符传递给它进行拆分(我假设这就是' '参数的用途)

当您将值从 SSMS 结果网格中复制出来时,它已经将制表符换成了空格(SSMS 将制表符转换为空格),因此当您运行它时,当使用仅包含空格的硬编码值时,它“看起来是正确的输出”。

..但是数据库表中的数据肯定有标签!始终小心从 SSMS 结果网格中复制内容;它会删除字符,更改字符并在最后切断更长的数据,因此不能保证准确反映表中的内容。

select * from dbo.SDF_SplitString(REPLACE(@Detail, CHAR(9), ' '),' ',88)

应该给出你期望的输出..

如果您可以选择更改此字段以使其中没有分隔数据会更安全;如果位置发生变化,拆分有时会产生无法使用的结果


推荐阅读