3

メモ帳/Sql Server 管理スタジオのすべての文字列をキャメル ケースに変換し、すべてのアンダースコアを削除したいと考えています。

例えば:

string a = REFERENCE_DATA_ID
String b = ReferenceDataId

文字列 a のアンダースコアを削除し、文字列 b に示すようにキャメル ケースに変換します。私を助けてください。

4

2 に答える 2

3

これは、notepad++ で 1 ステップで実行できます。

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 回以上存在することはありません。それ以下であれば問題ありません。

于 2015-09-26T15:00:55.190 に答える
1

データが既にテーブルにあると仮定すると、正規表現を使用する必要がありますか? これを行うためのスカラー関数を作成して、以下の手順に従ってください。

  1. UPDATE tableName SET stringa = REPLACE(stringa,'_',' ') -- アンダースコアをスペースに置き換えます
  2. UPDATE tableName SET stringa = dbo.ProperCase(stringa) -- 以下で作成した関数を使用してフィールドを更新します。
  3. UPDATE tableName SET stringa = REPLACE(stringa,' ','') -- ここでスペースを削除します

関数

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
于 2012-11-09T11:27:03.283 に答える