teratail header banner
teratail header banner
質問するログイン新規登録

質問編集履歴

7

質問内容の修正

2018/12/26 06:38

投稿

退会済みユーザー
title CHANGED
File without changes
body CHANGED
@@ -1,6 +1,6 @@
1
1
  年月を表す year_month というカラムが 6 文字の 201812 のような `varchar(6)` 型になっているのですが
2
2
  (これはいろいろな場所で使われているので変更できません)
3
- このフィールドを time 型の値と比較検索したいです
3
+ このフィールドを比較検索したいです
4
4
 
5
5
  https://dev.mysql.com/doc/refman/5.6/ja/cast-functions.html
6
6
  MySQL にもキャストがあるみたいなのですが

6

質問内容の修正

2018/12/26 06:38

投稿

退会済みユーザー
title CHANGED
File without changes
body CHANGED
@@ -1,4 +1,4 @@
1
- 年月を表す year_month というカラムが 6 文字の 201812 のような 'varchar(6)' 型になっているのですが
1
+ 年月を表す year_month というカラムが 6 文字の 201812 のような `varchar(6)` 型になっているのですが
2
2
  (これはいろいろな場所で使われているので変更できません)
3
3
  このフィールドを time 型の値と比較検索したいです
4
4
 

5

質問内容の修正

2018/12/26 06:36

投稿

退会済みユーザー
title CHANGED
File without changes
body CHANGED
@@ -1,4 +1,4 @@
1
- 年月を表す year_month というカラムが 6 文字の 201812 のような string 型になっているのですが
1
+ 年月を表す year_month というカラムが 6 文字の 201812 のような 'varchar(6)' 型になっているのですが
2
2
  (これはいろいろな場所で使われているので変更できません)
3
3
  このフィールドを time 型の値と比較検索したいです
4
4
 

4

質問内容の修正

2018/12/26 06:36

投稿

退会済みユーザー
title CHANGED
File without changes
body CHANGED
@@ -33,7 +33,6 @@
33
33
  @activities = @activities.order('id desc')
34
34
  ```
35
35
 
36
-
37
36
  view
38
37
  ```
39
38
  <% if @activities.present? %>
@@ -42,4 +41,15 @@
42
41
 
43
42
  のところでエラーになります
44
43
 
45
- g投目の where 文を消すとエラーなく表示されます
44
+ 目の where 文を消すとエラーなく表示されます
45
+
46
+
47
+ ### 試した例:
48
+
49
+ エラーを起こす
50
+ .select('STR_TO_DATE(year_month, "%Y%m")')
51
+ .where("year_month >= '201804'")
52
+
53
+ エラーを起こさない
54
+ .where("id >= '201804'")
55
+ .where(year_month: '201804')

3

質問内容の修正

2018/12/26 06:35

投稿

退会済みユーザー
title CHANGED
File without changes
body CHANGED
@@ -20,4 +20,26 @@
20
20
  ```
21
21
  とかいてもやはりエラーになります
22
22
 
23
- どうかけばいいのでしょうか…
23
+ どうかけばいいのでしょうか…
24
+
25
+
26
+ 追記:
27
+
28
+ controller
29
+ ```
30
+ puts params[:since] # 201804 が表示される
31
+ @activities = Act.where(user_id: user_id)
32
+ @activities.where("year_month >= ?", params[:since]) if params[:since] # ここでフォームから受け取った6文字の年月で表示内容を絞りたい
33
+ @activities = @activities.order('id desc')
34
+ ```
35
+
36
+
37
+ view
38
+ ```
39
+ <% if @activities.present? %>
40
+ ...
41
+ ```
42
+
43
+ のところでエラーになります
44
+
45
+ 2g投目の where 文を消すとエラーなく表示されます

2

質問内容の修正

2018/12/26 06:26

投稿

退会済みユーザー
title CHANGED
File without changes
body CHANGED
@@ -13,4 +13,11 @@
13
13
  記事を読むと string => int は暗黙のうちにやってくれるみたいにかいてるんですが
14
14
  select をかかなくても SQL syntax エラーになります
15
15
 
16
+ https://dev.mysql.com/doc/refman/5.6/ja/string-comparison-functions.html
17
+ 文字列のまま1文字ずつ比較してくれる strcmp というのもあるみたいなのですが
18
+ ```
19
+ .where('strcmp(year_month, ?) >= 0', '201804')
20
+ ```
21
+ とかいてもやはりエラーになります
22
+
16
23
  どうかけばいいのでしょうか…

1

質問内容の修正

2018/12/26 05:33

投稿

退会済みユーザー
title CHANGED
File without changes
body CHANGED
@@ -8,9 +8,9 @@
8
8
  Act.select('CAST(year_month AS SIGNED)')
9
9
  .where('year_month >= ?', '201804')
10
10
  ```
11
- のようにかくと syntax error になります
11
+ のようにかくと SQL syntax error になります
12
12
 
13
13
  記事を読むと string => int は暗黙のうちにやってくれるみたいにかいてるんですが
14
- select をかかなくても syntax エラーになります
14
+ select をかかなくても SQL syntax エラーになります
15
15
 
16
16
  どうかけばいいのでしょうか…