我想从select中的varchar中删除小写字母。 是否可以在不必实现功能的情况下完成?
例如:
declare @s varchar(max) = 'ThisIsADifferentTest'
select /*<some opperation with the varchar>*/@s
我想获得'TIADT'
提示:如果我们可以在varchars:
之间执行一个布尔交集,那就可以了select intersection(@s,UPPER(@s))
答案 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))