如何从varchar中删除小写字母

时间:2014-02-19 14:14:20

标签: sql sql-server

我想从select中的varchar中删除小写字母。 是否可以在不必实现功能的情况下完成?

例如

 declare @s varchar(max) = 'ThisIsADifferentTest'
 select /*<some opperation with the varchar>*/@s

我想获得'TIADT'

提示:如果我们可以在varchars:

之间执行一个布尔交集,那就可以了
select intersection(@s,UPPER(@s))

1 个答案:

答案 0 :(得分:1)

可能性能最佳的方法是使用CLR和正则表达式。但您可以使用辅助数字表。

我使用下面的spt_values进行演示。你应该create a permanent one

DECLARE @s VARCHAR(2047) = 'ThisIsADifferentTest';

WITH Nums
     AS (SELECT number
         FROM   master..spt_values
         WHERE  type = 'P'
                AND number BETWEEN 1 AND 2047)
SELECT CAST((SELECT SUBSTRING(@s, number, 1)
             FROM   Nums
             WHERE  number <= LEN(@s)
                    AND SUBSTRING(@s, number, 1) LIKE '[A-Z]' COLLATE Latin1_General_Bin
             ORDER  BY number
             FOR XML PATH('')) AS VARCHAR(2047))