Salient Solutions

wrasslin ones and nones for fun and profit - Sky Sanders' Blog
Get your own ranked flair here
posts - 92, comments - 102, trackbacks - 0

TSQL Pascal case and concatenate a string

 

this_string IS all Over_the_MAP = ThisStringIsAllOverTheMap

 

/*
	Pascal cases and concatenates a string. Underscores and spaces are 
	treated as boundaries and are removed after casing.
	If a string is all upper or lower it will be proper cased.
	Otherwise just capitalize first character.
*/

DECLARE	@current_object_name NVARCHAR(128),
		@generated_class_name  NVARCHAR(128)


SET @current_object_name = 'this_string IS all Over_the_MAP'

-- >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
CREATE TABLE #fn_pascal_case_parts ([name] NVARCHAR(256))
DECLARE	@fn_pascal_case_input NVARCHAR(256),
		@fn_pascal_case_output NVARCHAR(256),
		@fn_pascal_case_part NVARCHAR(128),
		@fn_pascal_case_sql VARCHAR(MAX)
-- --> PascalCase Function - set input
SET @fn_pascal_case_input = @current_object_name
-- >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>		
BEGIN --> PascalCase Function common code 
	-- copy/paste this block as-is and just set/get input/output
	-- if modifcations are made - other instances of this code block should be replaced.
	-- is ugly but the closest we can get to re-usable code in a batch statement
	IF CHARINDEX(' ',@fn_pascal_case_input,0)>0 OR CHARINDEX('_',@fn_pascal_case_input,0)> 0
		-- TSQL TIP: CS string comparisons on CI server
		OR (SELECT @fn_pascal_case_input COLLATE Latin1_General_CS_AS) = UPPER(@fn_pascal_case_input)
		OR (SELECT @fn_pascal_case_input COLLATE Latin1_General_CS_AS) = LOWER(@fn_pascal_case_input)
		BEGIN
			SET @fn_pascal_case_output = ''
			SET @fn_pascal_case_input = REPLACE(@fn_pascal_case_input, ' ', '_') ;
			DELETE FROM #fn_pascal_case_parts
			SELECT  @fn_pascal_case_sql = 'insert into #fn_pascal_case_parts select '
					+ ''''
					+ REPLACE(@fn_pascal_case_input, '_', ''' union all select ''')
					+ ''''
			EXEC ( @fn_pascal_case_sql )
			DECLARE cPascalCase CURSOR READ_ONLY
				FOR SELECT  UPPER(SUBSTRING([name], 1, 1))
							+ LOWER(SUBSTRING([name], 2, LEN([name]) - 1))
					FROM    #fn_pascal_case_parts
			OPEN cPascalCase
			FETCH NEXT FROM cPascalCase INTO @fn_pascal_case_part
			WHILE @@FETCH_STATUS = 0
				BEGIN
					SET @fn_pascal_case_output = @fn_pascal_case_output + @fn_pascal_case_part
					FETCH NEXT FROM cPascalCase INTO @fn_pascal_case_part
				END
			CLOSE cPascalCase
			DEALLOCATE cPascalCase
		END
	ELSE
		SET @fn_pascal_case_output = UPPER(SUBSTRING(@fn_pascal_case_input, 1, 1)) + SUBSTRING(@fn_pascal_case_input, 2, LEN(@fn_pascal_case_input) - 1)			
	DROP TABLE #fn_pascal_case_parts 		
END --> PascalCase Function - copy/paste this block as-is and just set/get input/output
-- <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
-- <-- PascalCase Function - get output
SET @generated_class_name = @fn_pascal_case_output				
-- <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<

PRINT @current_object_name + ' = ' + @generated_class_name

Technorati tags:

Print | posted on Saturday, January 23, 2010 5:11 PM |

Feedback

No comments posted yet.

Post Comment

Title  
Name  
Email
Url
Comment   
Please add 5 and 4 and type the answer here:

Powered by: