我想将我的记事本/Sql Server 管理工作室中的所有字符串转换为驼峰式大小写并删除所有下划线。
例如:
string a = REFERENCE_DATA_ID
String b = ReferenceDataId
我想删除字符串 a 中的下划线并转换为骆驼大小写,如字符串 b 所示。请帮帮我。
我想将我的记事本/Sql Server 管理工作室中的所有字符串转换为驼峰式大小写并删除所有下划线。
例如:
string a = REFERENCE_DATA_ID
String b = ReferenceDataId
我想删除字符串 a 中的下划线并转换为骆驼大小写,如字符串 b 所示。请帮帮我。
您可以在 notepad++ 中一步完成:
Find: ([a-z]+)[_]?([a-z]?)([a-z]+)[_]?([a-z]?)([a-z]+)[_]?([a-z]?)([a-z]+)\.php
Replace: $1\U$2\L$3\U$4\L$5\U$6\L$7
唯一的问题是,您需要知道最低分数可以出现的最长时间以及字符串如何结束。在上面的示例中,我将 php 文件名替换为 camelCase,知道低于分数不能出现超过 3 次,更少是没有问题的。
假设您的数据已经在表中,是否必须使用正则表达式?为什么不创建一个标量函数来执行此操作并按照以下步骤操作:
CREATE FUNCTION [dbo].[ProperCase]
(
@String VARCHAR(255)
)
RETURNS VARCHAR(255) AS
BEGIN
DECLARE @i INT
DECLARE @Char CHAR(1)
DECLARE @CorChar CHAR(1)
DECLARE @PrevAscii INT
DECLARE @PrevAscii2 INT
DECLARE @Ret VARCHAR(255)
/* Captalisation rules */
-- Capitalise first letter of each word
-- Capitalise next letter after special characters
-- eg joe o'bloggs-bloggs jr -> Joe O'Bloggs-Bloggs Jr
SET @Ret = ''
SET @i = 1
WHILE @i <= LEN(@String)
BEGIN
SET @Char = SUBSTRING(@String, @i, 1)
SET @CorChar = CASE WHEN @i = 1 THEN UPPER(@Char)-- First letter
WHEN @PrevAscii = 32 THEN UPPER(@Char)-- Follows Space
WHEN @PrevAscii = 39 AND @PrevAscii2 = 79 THEN UPPER(@Char)-- Follows O'
WHEN @PrevAscii = 45 THEN UPPER(@Char)-- Follows Dash
WHEN @PrevAscii = 46 THEN UPPER(@Char)-- Follows Fullstop
ELSE LOWER(@Char)
END
SET @Ret = @Ret + @CorChar
SET @i = @i + 1
SET @PrevAscii2 = @PrevAscii
SET @PrevAscii = ASCII(@CorChar)
END
--Now sort out capitalistaion for van, de, den, and der
SET @Ret = CASE WHEN @Ret LIKE 'Van %' THEN 'v' + SUBSTRING(@Ret,2,255) ELSE @Ret END
SET @Ret = CASE WHEN @Ret LIKE 'De %' THEN 'd' + SUBSTRING(@Ret,2,255) ELSE @Ret END
SET @Ret = CASE WHEN @Ret LIKE 'Der %' THEN 'd' + SUBSTRING(@Ret,2,255) ELSE @Ret END
SET @Ret = CASE WHEN @Ret LIKE 'Den %' THEN 'd' + SUBSTRING(@Ret,2,255) ELSE @Ret END
SET @Ret = REPLACE(@Ret,' De ',' de ')
SET @Ret = REPLACE(@Ret,' Der ',' der ')
SET @Ret = REPLACE(@Ret,' Den ',' den ')
RETURN @Ret
END