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

回答編集履歴

4

コード追記

2021/01/05 05:47

投稿

hatena19
hatena19

スコア34367

answer CHANGED
@@ -25,7 +25,7 @@
25
25
  (SELECT TData.FData, TReplace.Fld1, TReplace.Fld2
26
26
  FROM TData, TReplace
27
27
  WHERE TData.FData Like "*" & TReplace.Fld1 & "*"
28
- ORDER BY TReplace.ID) Q
28
+ ORDER BY TReplace.ID DESC) AS Q
29
29
  SET Q.FData = Replace(Q.FData,Q.Fld1,Q.Fld2,1,-1,1);
30
30
  ```
31
31
  クエリ実行後
@@ -39,4 +39,19 @@
39
39
 
40
40
 
41
41
  参考リンク
42
- [複数の文字列置換をクエリで一気に実行する-改良版 - hatena chips](https://hatenachips.blog.fc2.com/blog-entry-458.html)
42
+ [複数の文字列置換をクエリで一気に実行する-改良版 - hatena chips](https://hatenachips.blog.fc2.com/blog-entry-458.html)
43
+
44
+ 追記
45
+ ---
46
+ コメントより
47
+ > 実現したかったことは、「FData」に 「Fld1」が含まれていたら「Fld2」の値を返すとなります。
48
+ 今回の場合だと「FData」内の文字が一部変換されてしまいました。
49
+ また、TDataテーブルにFData2(空白)のフィールドがあるとして、そこに「Fld2」の値を返せればと考えています。元のフィール「FData」は残したいです。
50
+
51
+ 上記のクエリの応用です。
52
+
53
+ ```sql
54
+ UPDATE
55
+ (SELECT TData.FData, TData.FData2, TReplace.Fld2 FROM TData, TReplace WHERE TData.FData Like "*" & TReplace.Fld1 & "*" ORDER BY TReplace.ID DESC) AS Q
56
+ SET Q.FData2 = Q.Fld2;
57
+ ```

3

コード修正

2021/01/05 05:47

投稿

hatena19
hatena19

スコア34367

answer CHANGED
@@ -25,7 +25,7 @@
25
25
  (SELECT TData.FData, TReplace.Fld1, TReplace.Fld2
26
26
  FROM TData, TReplace
27
27
  WHERE TData.FData Like "*" & TReplace.Fld1 & "*"
28
- ORDER BY Len(TReplace.Fld1) DESC) Q
28
+ ORDER BY TReplace.ID) Q
29
29
  SET Q.FData = Replace(Q.FData,Q.Fld1,Q.Fld2,1,-1,1);
30
30
  ```
31
31
  クエリ実行後

2

説明の改善

2020/12/29 04:45

投稿

hatena19
hatena19

スコア34367

answer CHANGED
@@ -1,12 +1,12 @@
1
1
  変換対応表テーブル **TReplace**
2
2
 
3
- | ID | Fld1 | Fld2 |
3
+ |ID|Fld1|Fld2|
4
- |----|--------------------------|----------|
4
+ |--|--|--|
5
- | 1 | お母さん&お父さん | 母と父 |
5
+ |1|お母さん&お父さん|母と父|
6
- | 2 | パパ ママ | 母と父 |
6
+ |2|パパママ|母と父|
7
- | 3 | おかあさん&おばあちゃん | 母&祖母 |
7
+ |3|おかあさん&おばあちゃん|母&祖母|
8
- | 4 | お母さん | |
8
+ |4|お母さん|母|
9
- | 5 | お父さん | |
9
+ |5|お父さん|父|
10
10
 
11
11
  変換対象テーブル **TData**
12
12
 
@@ -26,8 +26,17 @@
26
26
  FROM TData, TReplace
27
27
  WHERE TData.FData Like "*" & TReplace.Fld1 & "*"
28
28
  ORDER BY Len(TReplace.Fld1) DESC) Q
29
- SET Q.FData = Replace([Q].[FData],[Q].[Fld1],[Q].[Fld2]);
29
+ SET Q.FData = Replace(Q.FData,Q.Fld1,Q.Fld2,1,-1,1);
30
30
  ```
31
+ クエリ実行後
31
32
 
33
+ | ID | FData |
34
+ |--|--|
35
+ |1|○○母と父○○○|
36
+ |2|□母□□父|
37
+ |3|△△△母&祖母△△|
38
+ |4|△△母と父△|
39
+
40
+
32
41
  参考リンク
33
42
  [複数の文字列置換をクエリで一気に実行する-改良版 - hatena chips](https://hatenachips.blog.fc2.com/blog-entry-458.html)

1

間違い修正

2020/12/29 04:44

投稿

hatena19
hatena19

スコア34367

answer CHANGED
@@ -1,11 +1,12 @@
1
1
  変換対応表テーブル **TReplace**
2
2
 
3
- | ID | FData |
4
- |--|--|
5
- | 1 | ○○パパ ママ○○○ |
3
+ | ID | Fld1 | Fld2 |
4
+ |----|--------------------------|----------|
6
- | 2 | お母さん□□お父さん |
5
+ | 1 | お母さんお父さん | 母と父 |
6
+ | 2 | パパ ママ | 母と父 |
7
- | 3 | △△△おかあさん&おばあちゃん△△ |
7
+ | 3 | おかあさん&おばあちゃん | 母&祖母 |
8
- | 4 | △△お母さん&お父さん△ |
8
+ | 4 | お母さん | |
9
+ | 5 | お父さん | 父 |
9
10
 
10
11
  変換対象テーブル **TData**
11
12