SQL Server 2000 中不区分大小写的 REPLACE()

发布于 2024-08-05 20:12:53 字数 242 浏览 4 评论 0原文

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

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

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

I have a field that contains strings such as 'Blah-OVER', 'Blah-OveR', etc. and want to select them without the 'over's. This only catches the first case (so to speak) and not the others:

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

How do I just get them all to say 'Blah-' (preserving the case of what's left) without attempting to cover every case combination with another nested REPLACE function?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

南七夏 2024-08-12 20:12:53

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

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

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

更新

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

没有任何内置 SQL 函数可以就地执行此转换,但构建 使用 的 CLR 函数正则表达式。 (在 SQL 2005 上,而不是在 SQL 2000 上……哦,我需要更多咖啡)。

Use a case insensitive collation:

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

See COLLATE for list of collation names so you choose the one appropiate for your data.

Update

Ok, so I missed your actual request (change case of input, not find case-insensitive). The proper solution is... not to change the input but use an adequate collation for your data. If the data must be displayed in a specific format, use display options in the client, eg. CSS text-transform:uppercase, not in the server SELECT.

There isn't any built-in SQL function to do this transformation in-place, but is trivial to build a CLR function that uses RegEx. (On SQL 2005, not on SQL 2000... doh, I need more coffe).

东京女 2024-08-12 20:12:53

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

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

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

I'm not familiar with SQL Server, but maybe it allows you to make use of regular expressions. These usually offer a case-insensitive mode (set via the i-flag).

Otherwise you could uppercase before the replace call, e.g.

SELECT field as "before", REPLACE(UPPER(field), 'OVER', '') as "after"
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文