回答編集履歴
2
sqliteのバージョンについて追記
test
CHANGED
@@ -1,14 +1,10 @@
|
|
1
1
|
> sqlite3.OperationalError: no such function: SUBSTRING
|
2
|
-
|
3
|
-
|
4
2
|
|
5
3
|
|
6
4
|
|
7
5
|
Pythonのバージョン、もしくは組み込みのsqlite3のバージョンを確認して見て下さい。
|
8
6
|
|
9
7
|
コード自体は新しいバージョンでは動くはずです。
|
10
|
-
|
11
|
-
|
12
8
|
|
13
9
|
|
14
10
|
|
@@ -34,40 +30,20 @@
|
|
34
30
|
|
35
31
|
|
36
32
|
|
37
|
-
|
33
|
+
python3.7/sqlite 3.21 substring は失敗。substr は使えました。
|
38
34
|
|
35
|
+
python3.8/sqlite 3.34 でsubstring の動作を確認。
|
36
|
+
|
39
|
-
|
37
|
+
※ パッチバージョンによってもバージョンが変わるかもしれません。
|
40
38
|
|
41
39
|
|
42
40
|
|
43
|
-
```
|
41
|
+
```python
|
44
42
|
|
45
|
-
|
43
|
+
# sqliteのバージョンの確認方法
|
46
44
|
|
45
|
+
import sqlite3
|
46
|
+
|
47
|
-
|
47
|
+
print(sqlite3.sqlite_version_info)
|
48
48
|
|
49
49
|
```
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
sqlite3 では LEFT をサポートしてません。SUBSTRING を使います。
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
> 試したこと②
|
60
|
-
|
61
|
-
```
|
62
|
-
|
63
|
-
cur.execute(
|
64
|
-
|
65
|
-
"'SELECT item_id, store_name, item_name FROM items s WHERE LEFT' + '(' + 's.item_name, 6' + ')' + 'like "パンナコッタ"' ")
|
66
|
-
|
67
|
-
```
|
68
|
-
|
69
|
-
|
70
|
-
|
71
|
-
発行されるクエリは (1) と実質同じです。
|
72
|
-
|
73
|
-
`s.item_name` は SQL のカラム名なので、分割する必要はありません。
|
1
追記: SUBSTR を使う
test
CHANGED
@@ -27,6 +27,10 @@
|
|
27
27
|
- LIKE句のパターンマッチを使う。
|
28
28
|
|
29
29
|
`WHERE s.item_name LIKE 'パンナコッタ%'`
|
30
|
+
|
31
|
+
- 追記: SUBSTR を使う
|
32
|
+
|
33
|
+
"substring()" is an alias for "substr()" beginning with SQLite version 3.34.
|
30
34
|
|
31
35
|
|
32
36
|
|