Как @ Крис Lively указывает на твердую функцию верблюд расщепления Вероятно, какая-то форма - лучший подход, но вот один запрос, который делает все это встроенным. Очевидно, что для сопоставления шаблонов, очевидно, рассматривается сравнение, и в этом случае я использовал чувствительную к регистру функцию PATINDEX (поскольку в стороне я должен был явно определить каждую прописную букву в соответствующем выражении, поскольку [AZ] не вернул правильную результаты, я думаю, что это тема для another question ....)
CREATE TABLE dbo.OriginalNames
(
CamelCaseName VARCHAR(30),
)
GO
INSERT INTO dbo.OriginalNames VALUES ('thisIsColumnName')
INSERT INTO dbo.OriginalNames VALUES ('thisIsAttributeName')
INSERT INTO dbo.OriginalNames VALUES ('thisIsAnotherAttributeName')
GO
SELECT * FROM dbo.OriginalNames;
GO
WITH
L0 AS(SELECT 1 AS c UNION ALL SELECT 1),
L1 AS(SELECT 1 AS c FROM L0 AS A, L0 AS B),
L2 AS(SELECT 1 AS c FROM L1 AS A, L1 AS B),
L3 AS(SELECT 1 AS c FROM L2 AS A, L2 AS B),
Numbers AS(SELECT ROW_NUMBER() OVER(ORDER BY c) AS n FROM L3)
SELECT DISTINCT(SplitNames.Value)
FROM (
SELECT nums.n, names.CamelCaseName, LTRIM(RTRIM(SUBSTRING(names.CamelCaseName, nums.n - 1, PATINDEX('%[|ABCDEFGHIJKLMNOPQRSTUVWXYZ]%', SUBSTRING(names.CamelCaseName + N'|', nums.n, LEN(names.CamelCaseName)) COLLATE SQL_Latin1_General_Cp1_CS_AS)))) AS [Value]
FROM Numbers AS nums INNER JOIN dbo.OriginalNames AS names ON nums.n <= CONVERT(int, LEN(names.CamelCaseName) + 1) AND PATINDEX('%[|ABCDEFGHIJKLMNOPQRSTUVWXYZ]%', SUBSTRING(N'|' + names.CamelCaseName, nums.n, 1) COLLATE SQL_Latin1_General_Cp1_CS_AS) > 0) AS SplitNames
GO
--DROP TABLE dbo.OriginalNames
-- OUTPUT as follows
--
-- Value
-- =========
-- Another
-- Attribute
-- Column
-- Is
-- Name
-- this
ищет функцию раскола, есть много для SQL Server, а затем сделать его разделить на заглавной буквы, а не обычный «». см. http://stackoverflow.com/questions/4098216/how-to-join-to-a-table-that-has-multiple-values-in-the-column/4098376#4098376 –