【问题标题】:Case-insensitive REPLACE() in SQL Server 2000SQL Server 2000 中不区分大小写的 REPLACE()
【发布时间】:2010-11-30 21:37:19
【问题描述】:

我有一个包含诸如“Blah-OVER”、“Blah-OveR”等字符串的字段,并且想要选择不带“over”的字符串。这仅捕获第一种情况(可以这么说)而不是其他情况:

SELECT field as "before", REPLACE(field, 'OVER', '') as "after"

我如何让他们都说“Blah-”(保留剩下的大小写)而不试图用另一个嵌套的 REPLACE 函数覆盖每个案例组合?

【问题讨论】:

  • 谢谢,Remus,我正在寻找合适的标签,但没有尝试过该组合。

标签: sql-server sql-server-2000


【解决方案1】:

我不熟悉 SQL Server,但也许它允许您使用正则表达式。这些通常提供不区分大小写的模式(通过 i 标志设置)。

否则你可以在替换调用之前大写,例如

SELECT field as "before", REPLACE(UPPER(field), 'OVER', '') as "after"

【讨论】:

  • 它产生'BLAH-'。因此,它不仅通过替换“OVER”来更改输入字符串。
  • 我遇到的一个站点建议您需要安装一些自定义 DLL 才能在 2000 年使用正则表达式。此外,这会将所有 'blah's 大写--对不起,我应该在问题中指定,将编辑。
  • ⚠:这会将整个 field 转换为较低的,而不是仅仅执行不区分大小写的查询
【解决方案2】:

使用不区分大小写的排序规则:

SELECT field as "before", REPLACE(field COLLATE SQL_Latin1_General_Cp1_CI_AI
, 'OVER', '') as "after"

请参阅COLLATE 获取排序规则名称列表,以便选择适合您数据的名称。

更新

好的,所以我错过了您的实际请求(更改输入的大小写,不区分大小写)。正确的解决方案是......不要更改输入,而是对您的数据使用适当的排序规则。如果数据必须以特定格式显示,请使用客户端中的显示选项,例如。 CSS text-transform:uppercase,不在服务器 SELECT 中。

没有任何内置的 SQL 函数可以就地执行此转换,但构建使用 RegExCLR function 是微不足道的。 (在 SQL 2005 上,而不是在 SQL 2000 上……嗯,我需要更多咖啡)。

【讨论】:

  • 这种语法对我来说是新的!谢谢!
猜你喜欢
  • 1970-01-01
  • 2014-12-19
  • 2014-08-19
  • 2015-07-23
  • 2011-09-27
  • 2012-05-13
  • 2015-06-29
  • 2011-05-11
  • 1970-01-01
相关资源
最近更新 更多