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 回答