我正在使用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函数是唯一的选择。
谢谢
答案 0 :(得分:2)
SQL Server的正则表达式非常有限。您可以创建自己的正则表达式函数或使用LIKE 但是无论哪种方式,SQL Server都无法识别您正在使用的“ regexp”功能。
Here是一些喜欢的例子
所以也许您正在寻找的是:
select top 5 * from dataset where (lower(variable) LIKE '%revenue%')
如果要创建自己的正则表达式函数,则可以使用regex101.com
测试正则表达式