回答編集履歴

2

function

2017/04/25 08:33

投稿

yambejp
yambejp

スコア114839

test CHANGED
@@ -77,3 +77,61 @@
77
77
 
78
78
 
79
79
  ```
80
+
81
+
82
+
83
+ # function
84
+
85
+ 汎用性のためfunctionを使います
86
+
87
+ まずストアードファンクション(replace2)を作成します
88
+
89
+ ```sql
90
+
91
+ drop function if exists replace2;
92
+
93
+ delimiter //
94
+
95
+ create function replace2(str varchar(255), pattern varchar(20), replacement varchar(20)) returns varchar(255) DETERMINISTIC
96
+
97
+ begin
98
+
99
+ DECLARE x INT DEFAULT 0;
100
+
101
+ DECLARE i INT DEFAULT 1;
102
+
103
+ set x=length(pattern);
104
+
105
+ while i<=x
106
+
107
+ do
108
+
109
+ set str=replace(str,substr(pattern,i,1),replacement);
110
+
111
+ set i=i+1;
112
+
113
+ end while;
114
+
115
+ return str;
116
+
117
+ end
118
+
119
+ //
120
+
121
+ delimiter ;
122
+
123
+
124
+
125
+ ```
126
+
127
+ functionを利用した実行
128
+
129
+ ```sql
130
+
131
+ select no
132
+
133
+ ,name from tb_actor
134
+
135
+ where replace2(name,'・$#_-*','') like '%ジョニーデップ%';
136
+
137
+ ```

1

追記

2017/04/25 08:33

投稿

yambejp
yambejp

スコア114839

test CHANGED
@@ -5,3 +5,75 @@
5
5
  ヒットさせればよいですが、インデックスなど効かないのであまり
6
6
 
7
7
  効率的な検索にはなりません。
8
+
9
+
10
+
11
+ # 追記
12
+
13
+
14
+
15
+ ```SQL
16
+
17
+ create table tb_actor(no int unique,name varchar(30));
18
+
19
+
20
+
21
+ insert into tb_actor values
22
+
23
+ (1,'ジョニー・デップ'),
24
+
25
+ (2,'ジョニーデップ'),
26
+
27
+ (3,'ジョニー/デップ'),
28
+
29
+ (4,'ジョ#ニーデップ'),
30
+
31
+ (5,'ジ__・--ョ$ニ#$$ー_デ-ッ******プ'),
32
+
33
+ (6,'ジョ・ニーデップ'),
34
+
35
+ (11,'オーランド・ブルーム'),
36
+
37
+ (21,'ハリー・ポッター');
38
+
39
+
40
+
41
+ ```
42
+
43
+
44
+
45
+ として、「・#_-$*」を除く場合こんな感じ
46
+
47
+ ```ここに言語を入力
48
+
49
+ select no
50
+
51
+ ,name from tb_actor
52
+
53
+ where
54
+
55
+ replace(
56
+
57
+ replace(
58
+
59
+ replace(
60
+
61
+ replace(
62
+
63
+ replace(
64
+
65
+ replace(name,'・','')
66
+
67
+ ,'$','')
68
+
69
+ ,'#','')
70
+
71
+ ,'_','')
72
+
73
+ ,'-','')
74
+
75
+ ,'*','') like '%ジョニーデップ%'
76
+
77
+
78
+
79
+ ```