【问题标题】:Lower() In Visual Studio 2010 SQL Query Not Working. Alternatives?Lower() 在 Visual Studio 2010 SQL 查询中不起作用。备择方案?
【发布时间】:2011-09-01 20:08:28
【问题描述】:

这是交易。

我有 2 个数据库。一个是较旧的并且具有扩展的数据。另一个较新,相关数据较少。他们都共享相同的产品,只是其中一个拥有更多数据。

我已经开始了一个项目,我想扩展新数据库以包含旧数据库中存在的一些缺失数据。问题是数据库之间的 ID 不匹配。所以我不得不按名字搜索。这可能是也可能不是相同的情况。 Visual Studio 中的查询绝对区分大小写。我对此进行了测试,我确信。

所以我的第一个想法是使用较低功能进行类似搜索。像这样:

WHERE lower([Name1]) LIKE lower('%Name2%') 

但是当我去运行它时它给了我一个错误。 Visual Studio 自动尝试将语句的语法更改为:

WHERE 'lower'([Name1]) LIKE 'lower'('%Name2%') 

我可以发誓 lower() 是正确的语法。而且我在谷歌上找不到任何替代方案或为什么视觉工作室不喜欢它。事实上,我只是在 SQL Management Studio 中尝试了一条类似的线路并且它有效。为什么它在 Visual Studio 中不起作用?

【问题讨论】:

  • 您在 Visual Studio 中究竟在做什么但不起作用?
  • 你不需要使用Lower进行字符串比较。默认情况下,SQL Server 在其字符串比较中不区分大小写。
  • “给我一个错误。”错误是....
  • 我认为我已经很好地描述了我正在做的事情。我在新的查询窗口中使用 Visual Studio 的服务器资源管理器。你不清楚什么?
  • @Neil: 不正确,sql字符串比较受比较中涉及的数据整理的大小写敏感。

标签: sql sql-server visual-studio-2010


【解决方案1】:

使用COLLATE 指定区分大小写。如果需要,只需强制执行不区分大小写的排序规则。根据现有的数据整理,可能不需要它。例如:

SELECT ... FORM ...
WHERE Name1 COLLATE SQL_Latin1_General_CI LIKE '...';

【讨论】:

  • COLLATE 也不起作用...大声笑我开始认为这是我正在使用的数据库的时代。它是从 80 年代开始的。
【解决方案2】:

首先 VS 不执行查询,您查询的列上的排序规则将确定 SQL 是否将其视为区分大小写。也因为您在比较中使用 LIKE,您真正想要的更像是:

WHERE lower([Name1]) LIKE '%' + lower([Name2]) '%'

【讨论】:

    【解决方案3】:

    使用WHERE lower([Name1]) LIKE '%name2%' 由于该值是常量(或输入?),因此您无需在此处将其转换为较低的值。你可以事先这样做。 另外,不确定[ ... ]。也不应该需要它们。

    但我认为最好的选择是告诉数据库您要比较不区分大小写,like so:

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多