我是正则表达式的新手,我想帮助解决我遇到的问题。我有一个表单,它有一个下拉字段,用户可以选择一个或多个值,因此该下拉菜单的值可以是艺术学院(如果用户选择一个选项)或医学院艺术系(如果用户)从下拉中选择了这两个。)
现在,我想转换此值,以便我可以使用它来过滤我的查询。我将在WHERE子句中使用这个/这些值。在这种情况下,我必须将此值重新格式化为“艺术学院”,“医学院”,因此它将适用于此声明:
SELECT * FROM myTable WHERE t_faculty IN ("Faculty of Arts", "Faculty of Medicine")
我的一个朋友建议我尝试在这个SQL语句中嵌入正则表达式(我正在使用SQL Server作为数据库)。您对如何解析并将其嵌入SQL语句有任何想法吗?基本上我需要在字符串的开头和结尾添加“字符,并用[,[space]”替换,[space]以获得想要的结果。
谢谢!
Agus的
答案 0 :(得分:0)
您可以使用STRING_SPLIT
在SQL中拆分逗号分隔的字符串。
select * from myTable
where t_faculty in (
select value from string_split('Faculty of Arts, Faculty of Medicine', ',')
)
STRING_SPLIT返回一个字符串值表,该字符串值由输入字符串中的分隔符分隔。
否则您可以使用多种模式匹配功能:
LIKE
PATINDEX
您也可以选择在应用中简单地拆分字符串。然后构建适当的SQL命令(或在linq中使用类似Contains的内容)。
答案 1 :(得分:0)
此处不使用正则表达式来更改SQL代码的突出显示部分:
SELECT FROM myTable WHERE t_faculty IN **("Faculty of Arts", "Faculty of Medicine")
我认为您对我们使用正则表达式的方式的理解可能是错误的。当您尝试与数据库中与共享一些常见属性的字符串匹配时,通常使用正则表达式。例如,如果您有两行字段“艺术学院1”和“艺术学院2”。并且你试图查找所有具有“艺术学院”的行,然后你可以把它写成SELECT * FROM myTABLE WHERE t_faculty LIKE'Teleulty of Arts *'其中*会匹配文本之后的任何内容。
而不是t_faculty IN (value1,value2)
,您将编写类似t_faculty LIKE 'your regular_expression here'
的内容。
答案 2 :(得分:0)
您不清楚如何将这些字符串传递给SQL Server。 SQL Server用单引号分隔字符串,即撇号不是双引号。 在您可以访问的任何客户端代码中,只需将所选字符串与撇号连接即可。 因此,如果用户选择了艺术学院和医学院,那么您可以将其全部加入一个长串中,如
"'" & <selected option> & "'" & ",'" & <selected option> & "'"