Microsoft Access 掲示板

所定記号以降を削除したい

4 コメント
views
4 フォロー

連投になりました。前回の関連で所定記号以降を削除したいのです。
[備考・MEMO]フィールドに例えば "あいうえおさしすせそ" と入力されており、を含むそれ以降の文字列を削除する更新SQLを実行可能でしょうか?("あいうえお"だけ残す) 下記のSET部にどういう記述をしたらいいのかが分からないです。特定文字列ならReplaceで出来そうなのですが。
strSQL =
          "UPDATE [T発注Sub] INNER JOIN [Q一括変更用チェックON分] " &

          "ON [T発注Sub].[発注明細ID] = [Q一括変更用チェックON分].[発注明細ID] " & _
          "SET [T発注Sub].[備考・MEMO] =     ;"
いいアイデアありますでしょうか?

minami
作成: 2024/06/11 (火) 11:09:55
通報 ...
1
hatena 2024/06/11 (火) 11:31:21 修正

[備考・MEMO]フィールドに例えば "あいうえおさしすせそ" と入力されており、を含むそれ以降の文字列を削除する更新SQLを実行可能でしょうか?

を含むそれ以降の文字列」の「」の前には何が入りますか。(入力ミス?)
仕様が不明確です。
コーディングするには仕様を明確に言語化する必要があります。

("あいうえお"だけ残す)

この意味が、
[備考・MEMO]が"あいうえお"で始まっている場合、"あいうえお"を残してそれ以降を削除する(言い換えるなら"あいうえお"にする)
ということなら、SQLは下記になります。

UPDATE [T発注Sub] INNER JOIN [Q一括変更用チェックON分]
       ON [T発注Sub].[発注明細ID] = [Q一括変更用チェックON分].[発注明細ID]
SET [T発注Sub].[備考・MEMO] = 'あいうえお'
WHERE [T発注Sub].[備考・MEMO] Like 'あいうえお*';
2
minami 2024/06/11 (火) 12:00:06 ddfe5@53762

hatenaさん ありがとうございます。
入力したと思ってたのですが抜けてました。例:”あいうえお*さしすせそ” の*(記号)以降の文字列を取り除きたい⇒”あいうえお”だけ残したい。不十分ですみませんでした。

3

下記のSQLで。

UPDATE [T発注Sub] INNER JOIN [Q一括変更用チェックON分]
       ON [T発注Sub].[発注明細ID] = [Q一括変更用チェックON分].[発注明細ID]
SET [T発注Sub].[備考・MEMO] = Left([T発注Sub].[備考・MEMO],InStr([T発注Sub].[備考・MEMO],'*')-1)
WHERE [T発注Sub].[備考・MEMO] Like '*[*]*';

注意点
SQLのLike演算子は、全角のと半角の*は区別しない
*はワイルドカードの意味になるので、文字としての*と認識させるには[*]というようにカッコで囲む


もし、全角ののみ対象としたいのなら、WHERE句を下記のように修正

WHERE InStr(1,[テーブル1].[aaa],'*',0) > 0;

詳細は下記を参照してください。

【Access】クエリで大文字/小文字、全角/半角、ひらがな/カタカナを区別して文字列比較したい | hatena chips

4
minami 2024/06/11 (火) 15:41:06 ddfe5@53762

hatenaさん ありがとうございます。
コード記述したら思い通りの結果になりました。Left関数とInStr関数の組合せはすごいアイデアです。
WHERE条件もこうすればいいのですね。
大変お世話になりました。