我有一个字段,其中包含'Blah-OVER','Blah-OveR'等字符串,并希望在没有'over'的情况下选择它们。这只能抓住第一个案例(可以这么说)而不是其他案例:
SELECT field as "before", REPLACE(field, 'OVER', '') as "after"
我如何让他们全部说'Blah-'(保留剩下的情况)而不试图用另一个嵌套的REPLACE函数覆盖每个案例组合?
答案 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 function的RegEx是微不足道的。 (在SQL 2005上,不在SQL 2000上...... doh,我需要更多coffe)。
答案 1 :(得分:0)
我不熟悉SQL Server,但它可能允许您使用正则表达式。这些通常提供不区分大小写的模式(通过i-flag设置)。
否则你可以在替换呼叫之前大写,例如
SELECT field as "before", REPLACE(UPPER(field), 'OVER', '') as "after"