Python中SQLite3的LEFT函数无法使用问题求助
问题原因与解决方案
你碰到的这个语法错误很明确——SQLite并不支持LEFT()这个字符串函数。虽然LEFT()在MySQL、SQL Server这类数据库里很常用,但SQLite有自己的字符串截取规则,得用它专属的函数来实现同样的功能。
正确的实现方式
在SQLite中,要获取字符串的前N个字符,你需要使用SUBSTR()函数,它的语法是:
SUBSTR(目标字段, 起始位置, 截取长度)
注意:SQLite里字符串的起始索引是1,不是0哦。所以要取title字段的前2个字符,对应的查询语句应该改成:
SELECT SUBSTR(title, 1, 2) FROM books
修正后的完整代码
把你的代码里的查询部分替换后,完整代码如下:
import sqlite3 from datetime import datetime conn = sqlite3.connect('database.db') conn.execute("""CREATE TABLE IF NOT EXISTS books ( title TEXT, author TEXT, pages INTEGER, published INTEGER )""") values = ('Deep Learning', 'Ian Goodfellow et al.', 775, datetime(2016, 11, 18).timestamp()) conn.execute("""INSERT INTO books VALUES (?, ?, ?, ?)""", values) # 这里替换成SUBSTR函数 r = conn.execute("SELECT SUBSTR(title, 1, 2) FROM books") print(r.fetchall()) # 会输出 [('De',)]
额外小技巧
如果之后你需要从字符串末尾截取字符(类似其他数据库的RIGHT()函数),也可以用SUBSTR(),只需要把起始位置设为负数就行,比如取title的最后3个字符:
SELECT SUBSTR(title, -3) FROM books
内容的提问来源于stack exchange,提问作者Dman




