How can I write an SQL Server query to trim all lowercase characters that comes before the first uppercase character in a string? e.g. string value “eaplgCostPrice”, remove “eaplg” and pass “CostPrice” to a new column
Advertisement
Answer
If PATINDEX is used in combination with certain collations then it can function case dependent.
Example snippet:
x
--
-- using a table variable for demonstration purposes
--
declare @Table table (id int identity(1,1), col varchar(30));
insert into @Table (col) values ('eaplgCostPrice'),('SellPrice'),('amount');
--
-- trim leading lowercases when needed
--
select col,
(case
when patindex('[a-z]%[a-z][A-Z]%', col COLLATE Latin1_General_Bin) > 0
then substring(col, patindex('%[A-Z]%', col COLLATE Latin1_General_Bin), len(col))
else col
end) as trimmedCol
from @Table
Result:
col trimmedCol
------------------ ----------------
eaplgCostPrice CostPrice
SellPrice SellPrice
amount amount