SQL语句中的正则表达式

问题描述 投票:0回答:3

我是正规表达的新手,我想帮助解决我遇到的问题。我有一个表单,它有一个下拉字段,用户可以选择一个或多个值,因此该下拉菜单的值可以是艺术学院(如果用户选择一个选项)或医学院艺术系(如果用户)从下拉中选择了这两个)。

现在,我想转换此值,以便我可以使用它来过滤我的查询。我将在WHERE子句中使用这个/这些值。在这种情况下,我必须将此值重新格式化为“艺术学院”,“医学院”,因此它将适用于此声明:

SELECT * FROM myTable WHERE t_faculty IN ("Faculty of Arts", "Faculty of Medicine")

我的一个朋友建议我尝试嵌入在这个SQL语句中的正则表达式(我正在使用SQL Server作为数据库)。您对如何解析并将其嵌入SQL语句有任何想法吗?基本上我需要在字符串的开头和结尾添加“字符,并用[,[space]”替换,[space]以获得想要的结果。

谢谢!

sql sql-server regex
3个回答
0
投票

您可以使用STRING_SPLIT在SQL中拆分逗号分隔的字符串。

select * from myTable
where t_faculty in (
    select value from string_split('Faculty of Arts, Faculty of Medicine', ',')
)

STRING_SPLIT返回一个字符串值表,该字符串值由输入字符串中的分隔符分隔。

否则,您可以使用多个模式匹配函数:

您也可以选择在应用中简单地拆分字符串。然后构建适当的SQL命令(或在linq中使用类似Contains的东西)。


0
投票

您不清楚如何将这些字符串传递给SQL Server。 SQL Server用单引号分隔字符串,即撇号不是双引号。在您可以访问的任何客户端代码中,只需将所选字符串与撇号连接即可。因此,如果用户选择了艺术学院和医学院,那么你可以将它们全部加入到一个长串中

"'" & <selected option> & "'" & ",'" & <selected option> & "'"

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'

© www.soinside.com 2019 - 2024. All rights reserved.