回答編集履歴

2

sqliteのバージョンについて追記

2021/04/04 06:23

投稿

teamikl
teamikl

スコア8664

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
- cur.execute(
43
+ # sqliteのバージョンの確認方法
46
44
 
45
+ import sqlite3
46
+
47
- "SELECT item_id, store_name, item_name FROM items s WHERE LEFT(s.item_name, 6) like 'パンナコッタ'")
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 を使う

2021/04/04 06:22

投稿

teamikl
teamikl

スコア8664

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