【问题标题】:Issue with WHERE clause on similar data due to "SPACE" difference由于“SPACE”差异,类似数据的 WHERE 子句出现问题
【发布时间】:2019-12-12 03:20:31
【问题描述】:

Excel Upload_UI5_SRP – 这里使用的“Excel”和“Upload”之间的空格是“普通空格”,ASCII 值为 32

Excel Upload_UI5_SRP - 这里使用的“Excel”和“Upload”之间的空格是“non-breakable space(nbsp)”,其ASCII值为160

如何解决这个问题?

有没有办法在上传数据时将“non-breakable space(nbsp)”转换为“normal space”?

在从数据库中获取数据时,是否有将“不可破坏空间(nbsp)”转换为“正常空间”的解决方案?

注意:不期望像这样的解决方案:

WHERE CatalogName IN ('Excel Upload_UI5_SRP','Excel Upload_UI5_SRP')
WHERE CatalogName ='Excel Upload_UI5_SRP' OR CatalogName ='Excel Upload_UI5_SRP'

【问题讨论】:

  • 你能做一个replace()吗?
  • 修复插入/更新此表的代码。
  • @SMor 插入是批量插入。而且两个文本看起来都一样,你建议什么修复?

标签: sql sql-server database sql-server-2012 ascii


【解决方案1】:

一种非常天真的方法可能会考虑通过REPLACE() 调用显式替换输入/输出中的这些字符:

-- Normalize both types of spaces
REPLACE(REPLACE(CatalogName, NCHAR(160), ' '), NCHAR(32), ' ')

如果您可以在上游处理转换(即当数据进入数据库时​​),您应该确保任何查询都将按预期工作,因为数据已经过清理。

如果您收到两种类型的空格,大概来自用户输入,您可能需要考虑编写一个自定义函数来显式处理这种情况以及您需要的任何其他潜在替换将来做(例如单引号、双引号、其他不可打印的字符),这样您就可以在写入数据库时​​使用Sanitize(@Input) 之类的东西。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-07-13
    • 2016-04-23
    • 2022-09-24
    • 1970-01-01
    相关资源
    最近更新 更多