我正忙着为工作中的大型项目进行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})"
答案 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,它设置您要查找的长度。