【问题标题】:How to print out all characters in MSSQL field -- CR LF issues如何打印出 MSSQL 字段中的所有字符——CR LF 问题
【发布时间】:2016-10-26 17:01:09
【问题描述】:

我有一个 MSSQL 表,它不断在字段中获取“空白”条目——我不确定这是以编程方式发生的还是由于用户输入而发生的。它将显示为一个小“块”,但其他字段看起来是空白的。如果我复制并粘贴到记事本++ 中并显示行字符,我会得到一个空格和一个 CRLF(有时不止一个)。我想确切地知道这个领域所拥有的一切。 CRLF 之后似乎还有另一个值没有出现在记事本中。如果我使用

搜索该字段
WHERE (e_text LIKE '% ' + CHAR(13) + '' + CHAR(10) + '%')

我得到了结果。如果我搜索使用

WHERE (e_text LIKE ' ' + CHAR(13) + '' + CHAR(10) + '%')

我得到了结果。

但如果我搜索使用:

WHERE (e_text LIKE '% ' + CHAR(13) + '' + CHAR(10) + '')

我没有得到结果。因此,最后不使用通配符,SQL 似乎说还有另一个值。

【问题讨论】:

  • 您提供的最后一个谓词WHERE (e_text LIKE '% ' + CHAR(13) + '' + CHAR(10) + '') 正在寻找一个在CRLF 之前有空格的字符串。如果你只使用WHERE (e_text LIKE CHAR(13) + '' + CHAR(10) + '') 会发生什么?
  • Aron,对不起——也包括在内——它什么也没找到。我的复制/粘贴到记事本++中显然没有显示尾随值。我刚刚跑了:msdn.microsoft.com/en-us/library/ms187323.aspx(使用 ASCII 和 CHAR 从字符串中打印 ASCII 值)结果是:32,13,10,10,32,32,32,32 所以,记事本缺少一个 CR 和四个尾随空格与此 SQL 打印输出对比。
  • 但是如果我搜索: WHERE (e_text LIKE CHAR(13) + '' + CHAR(10) + ''+ CHAR(10) +' ') 我仍然什么也得不到。我尝试以一个空格和 % 结尾,也没有骰子。

标签: sql-server char


【解决方案1】:

根本原因是您没有在将值插入数据库之前对其进行修剪。下面的示例可以帮助您识别哪些列有数据。我正在执行以下操作:

  1. 用空格替换换行符
  2. 修剪左侧多余的空格
  3. 修剪右侧的空格
  4. 这是否等于空字符串?如果是这样,那么这里什么都没有。

示例代码:

DECLARE @tbl TABLE (field1 varchar(100));    
INSERT INTO @tbl
VALUES 
('I am not null'),
('   '),
(' 

'),
('not null with new line

'),
('not null with trailing spaces        ');


SELECT *, CASE 
WHEN LTRIM(RTRIM(REPLACE(REPLACE(field1, CHAR(13), ''), CHAR(10), ''))) = '' THEN 'column can be trimmed to nothing' ELSE 'column has something' end
FROM @tbl

【讨论】:

  • 在少数情况下,SSMS 会显示带有一些 UTF 字符的空格。因此,长度检查应该有助于解决那些边缘情况(修剪会失败)
  • 感谢您以编程方式帮助纠正这个问题——我只是想通过并清理这些东西(开发人员将处理修剪)。我只是想知道如何找出那个单元格中的 SQL 到底有什么。
  • 如果您想确切了解它的内容,请使用 SSMS 以外的工具选择数据。或者,选择归档。我猜你并不真正关心任何可以修剪为无的东西,所以你可以使用我写的东西来帮助你更新数据库中的数据。
  • 也许我可以用另一种方式问这个问题——我想找到任何只有空格的字段,别无其他。如果它有任何其他字符,字母“D”或“?” -- 其他的,我不想碰它,即使里面还有其他的空白。
  • 是的,所以只需将我提供的内容移到 where 子句中:SELECT * FROM FOO WHERE LTRIM(RTRIM(REPLACE(REPLACE(field1, CHAR(13), ''), CHAR(10), ''))) = ''
猜你喜欢
  • 1970-01-01
  • 2011-01-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-03-30
相关资源
最近更新 更多