0

私は、大規模なプロジェクトでSQLスキーマを移行するのに時間がかかり、C#で正規表現を使用したことがありません。だから私はうまくいけば迅速な方向転換を探しています。文字列である変数でこれらの値を見つけるように、C#で正規表現を作成するにはどうすればよいですか。数字を切り出すのが簡単/迅速であれば、それも問題ありません。かっこ内のすべての数字で機能することを確認したいだけです。

CHARACTER VARYING(8000) ==> regex returns false because the length is <= 8000

CHARACTER VARYING(8001) ==> regex returns true because the length is > 8000

だから私の文字列は、"CHARACTER VARYING({0})"

4

3 に答える 3

2
public static string ReplaceLength(string s, int maxLength)
{
    return Regex.Replace(s, @"CHARACTER VARYING\((?<length>\d+)\)",
            match => "varchar(" + (
                                   int.Parse(match.Groups["length"].Value) <= maxLength ? 
                                        match.Groups["length"].Value : 
                                        "MAX"
                                  ) + 
                            ")");
}


テストケース

ReplaceLength("CHARACTER VARYING(8001)", 8000); // varchar(MAX)
ReplaceLength("CHARACTER VARYING(8000)", 8000); // varchar(8000)
于 2012-10-18T04:36:03.530 に答える
1

次の正規表現を使用して数値を取得できます。

CHARACTER VARYING\((\d+)\)そしてそれをグループ化します。C#でintとしてキャストでき、比較が必要ですか。

于 2012-10-18T03:35:56.937 に答える
1

netezzaからこの情報を取得する簡単な方法があることを付け加えたかっただけです。

select attname, datatype, attcolleng, name,  attlen, size, datatype, format_type, atttypid
from _V_RELATION_COLUMN col_t
    cross join _v_datatype dat_t
Where dat_t.objid = col_t.atttypid 
    and name='<table_name>'
    and size ='var'

結果セットでは、探している長さが設定されているattcolleng列を参照する必要があります。

于 2012-11-30T14:21:35.210 に答える