sql - 传递相同的函数但输出不同
问题描述
当通过字符串'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)
正确的输出
解决方案
好的,所以我让你运行的查询显示之间的字符12:15:0 11/13/2019
是 TAB(ascii 字符 9),而不是空格(ascii 字符 32)
这就是你得到你所做的输出的原因;您也许应该考虑在拆分之前用空格替换制表符,或者升级您的拆分功能,以便您可以将多个字符传递给它进行拆分(我假设这就是' '
参数的用途)
当您将值从 SSMS 结果网格中复制出来时,它已经将制表符换成了空格(SSMS 将制表符转换为空格),因此当您运行它时,当使用仅包含空格的硬编码值时,它“看起来是正确的输出”。
..但是数据库表中的数据肯定有标签!始终小心从 SSMS 结果网格中复制内容;它会删除字符,更改字符并在最后切断更长的数据,因此不能保证准确反映表中的内容。
select * from dbo.SDF_SplitString(REPLACE(@Detail, CHAR(9), ' '),' ',88)
应该给出你期望的输出..
如果您可以选择更改此字段以使其中没有分隔数据会更安全;如果位置发生变化,拆分有时会产生无法使用的结果
推荐阅读
- c# - C# 代码重用(默认接口方法/扩展)
- node.js - 密码散列不适用于 Put 请求
- javascript - WebRTC Peer ontrack 已调用但视频未播放
- python - 使用 Django @csrf_exempt,request.session 始终为空
- json - Laravel api 响应状态始终与正文相同
- php - 在 Symfony 中使用 cutom 事件而不是依赖注入是否有好处?
- sql - 在 S3 中从 CSV 进行 SQL 查询、插入、删除的最佳实践
- python - python regex sub 替换整个字符串
- python-3.x - Python Pillow ImageChops.difference 总是无
- ios - 表格视图单元格块选择中的现成 UITextView