将Pyodbc与SQL Server一起使用时,无法识别正则表达式功能

时间:2018-08-17 14:45:42

标签: python sql sql-server regex pyodbc

我正在使用Pyodbc从Microsoft SQL服务器中提取。无法识别SQL查询中的REGEXP函数。我不是SQL的强大用户,但这似乎很简单,我尝试了许多不同的语法,但没有任何效果。 LIKE函数适用于单个字符串,但我认为此正则表达式不同。

import pyodbc
import pandas as pd

if __name__ == '__main__':
   conn = None
   cursor = None
   try:
       conn = pyodbc.connect(r'DRIVER={ODBC Driver 17 for SQL Server};'
                      ,SERVER='###########'
                      ,DATABASE='####', UID='#####', PWD='#####')

    sql = "select top 5 * from dataset where (lower(variable) regexp '(^(total|)revenue(.|..|)$)') "

    data = pd.read_sql(sql,conn)
    print (data)

    except pyodbc.Error as e:
         print('ERR', e)
    finally:
         if cursor is not None: cursor.close()
         if conn is not None: conn.close()

返回的错误:

 pandas.io.sql.DatabaseError: Execution failed on sql 'select top 5 * from dataset where (lower(variable) regexp '(^(total|)revenue(.|..|)$)') ': ('42000', "[42000] [Microsoft][ODBC Driver 17 for SQL Server][SQL Server]Incorrect syntax near 'regexp'. (102) (SQLExecDirectW)")

我在SQL服务器上没有太多信息,但是我正在使用python3.5。

更新:

我想答案是此服务器不支持REGEX,而LIKE函数是唯一的选择。

谢谢

1 个答案:

答案 0 :(得分:2)

SQL Server的正则表达式非常有限。您可以创建自己的正则表达式函数或使用LIKE  但是无论哪种方式,SQL Server都无法识别您正在使用的“ regexp”功能。

Here是一些喜欢的例子

所以也许您正在寻找的是:

select top 5 * from dataset where (lower(variable) LIKE '%revenue%')

如果要创建自己的正则表达式函数,则可以使用regex101.com

测试正则表达式