c#Netezza数据类型的正则表达式

时间:2012-10-18 03:29:41

标签: c# .net sql regex netezza

我正忙着为工作中的大型项目进行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})"

3 个答案:

答案 0 :(得分: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)

答案 1 :(得分:1)

您可以使用以下正则表达式输出数字。

CHARACTER VARYING\((\d+)\)并对其进行分组。您可以在C#中将其转换为int,并且需要进行比较。

答案 2 :(得分: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,它设置您要查找的长度。