使用python连接SQL server数据,抓取数据时报“Invalid length parameter passed to the LEFT or SUBSTRING function”。
其中执行 cur.execute(sql) 时,sql语句使用到了 SUBSTRING 函数。关于这个函数的用法可自行学习,或者直接按照如下方式进行操作:
在SQL server控制台中的查询是允许函数值出现负值的(更正确的说法时这里出现负值也是可以正常执行的),而使用python抓取数据时的 cur.execute(sql) 不允许出现负值 。因此会出现sql语句在SQL server控制台可以正常执行,但是使用python抓取数据时会发生错误。
例如本人使用过程中的语句是这样的:

substring(reverse(T0.UserName00),1,charindex('\',reverse(T0.UserName00)) - 1)

此处UserName00有None值存在,-1之后会是负值,因此python执行时会报错。此处把-1去掉可以正常执行(确保不会出现负值)。

个人能力十分有限,如有缪错,欢迎广大网友指正。

在设置数据库实例的密码时,注意不要以数字开头,否则您将会遇到 ORA-00988 missing or invalid password (口令缺失或无效) 错误。 Oracle 10g 安装完成后,您可使用 dbca 命令创建新的数据库实例,或维护已有的数据库实例。 如果您安装的是 Oracle XE 数据库,则必须反安装 Oracle XE 后重新安装 Oracle XE,并在安装过程中指定非数字开头的密码 (例如 password 或 pswd123)。 ORA-00988: 口令缺失或无效[Oracle 10g会有的一个错误] SQL> create user zkj identif 帮同事分析一个问题,一个字符串用Substring截取,怎么操作都无效,后发现,这个字符串是增强型RTF类型,该类型可能包含图片、表格和超链接等。后试着将该字符先输出在文本框里,把其中的Html格式标签显示出来,清除,再截取即可。 转载于:https://www.cnblogs.com/zzkun/archive/2012/04/05/4481818.html... FROM  DBA.dbo.cost C 报错:消息 537,级别 16,状态 3,第 1 行 Invalid length parameter passed to the LEFT or SUBSTRING function. 出错原因:那就是名称这一 看错误的字面意思就清楚,一般是substringlength长度有错误。 例如:select top 10 SUBSTRING (c_dept , 1 ,CHARINDEX (',' , c_dept)-1) from ##dd_daily 要截取c_dept字段中第一个逗号前面的字符串,如果字段里面没有逗号,substring就会出错。 可以加入case判断就不会出错。 select ... if not exists(select 1 from EMR_SYS_APPCFG where CONFIGKEY =‘PreDefineModelConfig’ and VALUE like ‘%IsExpandUnitPMNew%’ ) UPDATE A SET A.[VALUE]=substring(A.[VALUE],0,charindex(’/UseUnitPM>’, A.[VALUE])-1)+’’ + ‘ExpandCurrentNote’ +substring(A.[VALUE] 看错误的字面意思就清楚,一般是substringlength长度有错误。 例如:select top 10 SUBSTRING (c_dept , 1 ,CHARINDEX (',' , c_dept)-1) from ##dd_daily 要截取c_dept字段中第一个逗号前面的字符串,如果字段里面没有逗号,substring就会出错。 可以加入case判断就不会出错。 select SUBSTRING (c_dept , 1 , case when CHARINDEX (',' , c_d..