[英]Same values being returned for multiple rows in sql but not all columns
[英]Regex match SQL values string with multiple rows and same number of columns
我试图匹配sql值字符串(0),(5),(12),...
或(0,11),(122,33),(4,51),...
或(0,121,12),(31,4,5),(26,227,38),...
以此类推
\(\s*\d+\s*(\s*,\s*\d+\s*)*\)(\s*,\s*\(\s*\d+\s*(\s*,\s*\d+\s*)*\))*
而且有效。 但...
如何确保正则表达式不匹配具有不同列数的值字符串(0,12),(1,2,3),(56,7)
如(0,12),(1,2,3),(56,7)
?
提前致谢...
:(
除非您添加更多约束,否则我认为您不能仅使用正则表达式来解决此问题。
它不能解决您所有的字符串问题,就像它不能用于检查方括号(例如“((())()((()(()())))”)无效。 那是一个更复杂的问题。
那就是我在课堂上学到的:P如果有人知道一种方法,那就太好了!
抱歉,我花了一些时间研究如何将字符串转换为数组并使用SQL对其进行更多工作,但缺少内置功能,解决方案最终会变得很棘手。
我建议尝试以不同的方式处理这种情况,因为如果数据库要逐渐填满,那么大规模字符串计算并不是最好的方法。
客户端验证和服务器端验证的组合可用于帮助防止不良数据(例如具有更多编号的不良数据)进入数据库。
如果您需要保留这些数字,则可以对架构进行重新整理,以包括一些可在查询中使用的元数据,例如有多少个数字以及它们是否完全匹配。 可以从您的服务器廉价地计算该信息并将其提供给数据库。
祝好运!
正如我在对该问题的评论中提到的那样,检查输入字符串是否有效的最佳方法是:在方括号之间包含相同数量的数字,是使用客户端编程,但不能清除SQL。
执行:
List<string> s = new List<string>(){
"(0),(5),(12)", "(0,11),(122,33),(4,51)",
"(0,121,12),(31,4,5),(26,227,38)","(0,12),(1,2,3),(56,7)"};
var qry = s.Select(a=>new
{
orig = a,
newst = a.Split(new string[]{"),(", "(", ")"},
StringSplitOptions.RemoveEmptyEntries)
})
.Select(a=>new
{
orig = a.orig,
isValid = (a.newst
.Sum(b=>b.Split(new char[]{','},
StringSplitOptions.RemoveEmptyEntries).Count()) %
a.newst.Count()) ==0
});
结果:
orig isValid
(0),(5),(12) True
(0,11),(122,33),(4,51) True
(0,121,12),(31,4,5),(26,227,38) True
(0,12),(1,2,3),(56,7) False
注意:第二个Select
语句获取逗号实例总数的和与Split
函数返回的字符串数组中的项数的模。 如果结果不等于零,则表示输入字符串无效。
我坚信,有一种最简单的方法可以实现这一目标,但是-目前,我不知道如何;)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.