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

时间:2009-09-23 20:33:38

标签: sql-server sql-server-2000

我有一个字段,其中包含'Blah-OVER','Blah-OveR'等字符串,并希望在没有'over'的情况下选择它们。这只能抓住第一个案例(可以这么说)而不是其他案例:

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

我如何让他们全部说'Blah-'(保留剩下的情况)而不试图用另一个嵌套的REPLACE函数覆盖每个案例组合?

2 个答案:

答案 0 :(得分:10)

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

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

有关归类名称列表,请参阅COLLATE,以便为您的数据选择合适的名称。

<强>更新

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

没有任何内置的SQL函数可以就地进行这种转换,但构建使用CLR functionRegEx是微不足道的。 (在SQL 2005上,不在SQL 2000上...... doh,我需要更多coffe)。

答案 1 :(得分:0)

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

否则你可以在替换呼叫之前大写,例如

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