2014-02-19 3 views
1

Я хочу удалить строчные буквы из varchar в select. Можно ли это сделать без необходимости выполнять функцию?Как удалить строчные буквы из varchar

Например:

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

Я хочу, чтобы получить 'TIADT'

ПОДСКАЗКА: это будет делать, если мы могли бы выполнить логическое пересечение типа VARCHAR:

select intersection(@s,UPPER(@s)) 
+0

Просто ASCII 'a-z' или включая символы с акцентом/неанглийскими символами? –

+0

просто ASCII [a-z] будет работать – Adminiculo

+0

Конечно, я хочу, чтобы у меня не было 20 + замен. – Adminiculo

ответ

1

Вероятно лучшим способом было бы использовать CLR и regex. Но вы можете использовать таблицу вспомогательных номеров.

Я использую 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)) 
Смежные вопросы