SQL语句中的正则表达式

时间:2018-05-15 06:39:18

标签: sql sql-server regex

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

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

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

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

谢谢!

Agus的

3 个答案:

答案 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返回一个字符串值表,该字符串值由输入字符串中的分隔符分隔。

否则您可以使用多种模式匹配功能:

您也可以选择在应用中简单地拆分字符串。然后构建适当的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> & "'"