Accessのクエリでたとえば下図のようなクエリがあるのですが、

------------------------------------------------------------
   製品番号   |  商品番号 |  品   名   |  品名カナ
------------------------------------------------------------
0123456789ABCD | 789ABCD   | ボールペン(黒)| ボールペン
123456789ABCDE | 89ABCDE   | 万年筆     | マンネンヒツ
    ・        ・       ・         ・
    ・        ・       ・         ・

このデータの「製品番号」の上位7桁だけ抽出したくてヘルプで関数をいろいろ調べてみたのですがよくわからず困っています.
前回違う質問をさせていただいたときに,更新クエリでRIGHT関数を使って下位7桁の抽出の仕方を教えていただいたのですが,その関数の逆版(LEFT関数??)のような感じの関数は存在しないのでしょうか?
ありましたらぜひ教えていただけないでしょうか.
どうぞよろしくお願い致します.

このQ&Aに関連する最新のQ&A

A 回答 (2件)

わかりにくい説明でしたね、ごめんなさい。


では、クエリを新規作成してみましょうか。

ご質問にあがっているテーブルのカラム名がわからないので以下のように仮定しますね。

商品テーブル:
・製品番号
・商品番号
・品名
・品名カナ

抽出条件に使用するカラム:製品番号をLeft関数で7文字分とってきます。
フィールドには以下のように入力することとなると思います。

Left([製品番号],7)

このフィールドの抽出条件に抽出したい文字列を入力してください。
"1234567"


SQLビューでみるとこんな感じになるのでは?

SELECT 商品テーブル.製品番号, 商品テーブル.商品番号, 商品テーブル.品名 ,商品テーブル.品名カナ
FROM 商品テーブル
WHERE ((Left(商品テーブル.製品番号,7) ="1234567"));

これで、必要とするデータが抽出されると思います。

補足ですが...
Left関数はの構文は以下のようになっていますので、文字列の部分にテーブルのカラム名と必要な文字数を記述してやります。

LEFT(文字列, 文字数)

ヘルプで"LEFT関数"を検索すると引っかかると思います。
    • good
    • 0
この回答へのお礼

takasgyさんありがとうございます!
丁寧な説明でとてもわかりやすく,すぐに試してみましたところ成功しました.
また,大変勉強になりました.
本当にありがとうございました! m(__)m

お礼日時:2001/06/12 12:01

Left関数ありますよ。



SQLならこんな感じ ==========================
SELECT t1.aa, t1.bb, t1.cc
FROM t1
WHERE ((Left(aa,5) ="12345"));
===========================================

また、Likeを使用することでも同様の機能が実現できます。

SQLならこんな感じ ==========================
SELECT t1.aa, t1.bb, t1.cc
FROM t1
WHERE (((t1.aa) Like '12345*'));
===========================================

クエリを作成してSQLビューで確認してみてください。

この回答への補足

早速のご回答ありがとうございます.
私の知識不足で申し訳ないのですが,SQLがよくわからないのでおかしなことを言ってましたらすみません.
・教えていただいたSQLを作成したクエリの下に追加してみたのですが,実行すると「SQLステートメントの後に文字が見つかりました.」と言う警告が出てその先に進めません,作成したクエリの中に埋め込んでみたりもしたのですが、やはり同じメッセージが出てしまいました.
入力するところが間違っているのでしょうか?
申し訳ありませんが、アドバイスお願い致します.

補足日時:2001/06/12 10:15
    • good
    • 0

このQ&Aに関連する人気のQ&A

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

関連するカテゴリからQ&Aを探す

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

QAccess 会員番号4桁にする方法

会員データをAccessで管理しております。
CSVファイルで送られてくるデータをAccessにインポートして
運用しております。
そこで、会員データは4桁の数字(0001・0002・・・)で
管理しているのですが、送られてくるCSVファイルは
頭の000がない状態で送られてきます。
この000を一括で付けるにはどのようにすればいいでしょうか。

会員データは0001から9999までランダムに1000件から2000件程度
送られてきます。

よろしくお願いします。

Aベストアンサー

<Test>

ID___会員番号
1____1
2____2
3____3
4____4

<Test>

ID___会員番号
1____0001
2____0002
3____0003
4____0004

と、インポート後に一括変換する方法を2つ示します。

************************************************************************
回答1、更新クエリの利用。
************************************************************************

<クエリ1>

_______フィールド:会員番号
________テーブル:Test
レコードの更新:Format(会員番号, "0000")
_______抽出条件:
___________または:

[SQLビュー]

UPDATE Test SET 会員番号 = Format(会員番号,"0000");

*********************************************************************************************
回答2、SQL文実行関数の利用。
*********************************************************************************************

[イミディエイト]
? CnnExecute("UPDATE Test SET 会員番号 = Format(会員番号,'0000') WHERE LEN(会員番号 & '')<>4;")
True

もちろん、標準モジュールに、次のような自作関数を追加する必要があります。
多分、CnnExecute関数を使えば、一連の処理を自動化できるでしょう。
インポートもコードで実行していればですが・・・。

Public Sub ErrMessage(ByVal CnnErrors As ADODB.Error, ByVal strSQL As String)
   MsgBox "ADOエラーが発生しましたので処理をキャンセルします。" & Chr$(13) & Chr$(13) & _
      "・Err.Description=" & CnnErrors.Description & Chr$(13) & _
      "・Err.Number=" & CnnErrors.Number & Chr$(13) & _
      "・SQL State=" & CnnErrors.SQLState & Chr$(13) & _
      "・SQL Text=" & strSQL, _
      vbExclamation, " ADO関数エラーメッセージ"
End Sub

Public Function CnnExecute(ByVal strSQL As String) As Boolean
On Error GoTo Err_CnnExecute
   Dim isOK As Boolean
   Dim cnn As ADODB.Connection
  
   isOK = True
   Set cnn = CurrentProject.Connection
   With cnn
     .Errors.Clear
     .BeginTrans
     .Execute strSQL
     .CommitTrans
   End With
Exit_CnnExecute:
On Error Resume Next
   cnn.Close
   Set cnn = Nothing
   CnnExecute = isOK
   Exit Function
Err_CnnExecute:
   isOK = False
   If cnn.Errors.Count > 0 Then
     ErrMessage cnn.Errors(0), strSQL
     cnn.RollbackTrans
   Else
     MsgBox "プログラムエラーが発生しました。システム管理者に報告して下さい。(CnnExecute)", _
        vbExclamation, " 関数エラーメッセージ"
   End If
   Resume Exit_CnnExecute
End Function

<Test>

ID___会員番号
1____1
2____2
3____3
4____4

<Test>

ID___会員番号
1____0001
2____0002
3____0003
4____0004

と、インポート後に一括変換する方法を2つ示します。

************************************************************************
回答1、更新クエリの利用。
************************************************************************

<クエリ1>

_______フィールド:会員番号
________テーブル:Test
レコードの更新:Format(会員番号, "0000")
_______抽...続きを読む

Qクエリ、期限抽出。

アクセスで期限という数値型のデータがあります。
1109,909,912.。。。
これはそれぞれ、2011/09/31,2009/09/31,2009/12/31
という風に解釈するのですが。
この数値データを ○○○○/○○/○○という風に変換というか
抽出するクエリというか式のアドバイスお願いします。
自分では苦肉の策で
([期限]-Right([期限],2))*0.01+2000 & "/" & Right([期限],2)
というようなものを作ってみましたが、
これだと、2011/09,2009/09,2009/12となるだけでうまく、
日まではでてきません。
それともともと数値型のこのデータを日付/時刻型にできれば
日まででてくるのでしょうか?
ここできちんとした日付/時刻型に変換できるとものすごく
うれしいのですが。

Aベストアンサー

質問をちゃんと読んでなかったですね
月末日を求めるのであれば

DateSerial([期限]\100,([期限] Mod 100)+1,0)

Q集計クエリでの抽出条件

アクセスのクロス集計で質問なのですが・・・
日付ごとの集計を行いたいのですが日付が21日締めで行いたいのです。
フォームで年と月を入れるとその月の集計を行いたいのです。
(例:フォームの日付入力2008/01と入力→集計クエリで2007/12/21~2008/01/20までの集計)
この場合、抽出条件はどのように行えばよいのでしょうか

Aベストアンサー

日付から[月度]を求める式フィールドを作ります

月度: Format(DateAdd("m",-(Day([日付])>20),[日付]),"yyyy/mm")

このフィールドに抽出条件を設定します

フォームのテキストボックスに条件を入力するのなら
=Forms!フォーム名!テキストボックス名

パラメータで条件を入力するのなら
=[年月を入力してください]

いずれの場合もクロス集計クエリのパラメータ指定で
パラメータ名とデータ型を指定しておくことを忘れないでね

QAccessのクエリでフィールドの一番大きな数字を抽出させるには?

OSはWin98SE
Access2000です。
多分簡単なことなのかもしれないのですが、追加クエリの抽出条件を使って、
その列(更新回数)でいちばん大きな数字のみ別テーブルに抽出(追加)させたいのですがその式がわからず悩んでいます。

例(主キーなし)
店番号|商品番号|更新回数|金額|・・・
001 |A021  |  2 |300 |・・・
002 |A034  |  1 |200 |・・・
001 |A122  |  1 |150 |・・・
001 |A043  |  3 |500 |・・・

上記で店番号001が3データ入っている中の更新回数が3のデータのみ別のテーブルに追加したいのですが、最大を求めるのでMaxやDMaxを使用したらよいのかな?などと思ったのですが、その先の式の書き方がわからないのでどなたか教えていただけませんか。
どうぞよろしくお願いします。

Aベストアンサー

三度storkです。

蛇足ですが、先ほどの回答は、SQLを直書きするものだったんで、練習用にGUIでの操作で最新データの取り出し方を補足しておきます。

from句に入っているSQLをクエリとして保存してください。
クエリ名は、[最新データ]
-------------------------------------------
select 店番号,max(更新回数) as max更新回数
from [PC売上_T] group by 店番号
-------------------------------------------
どんなクエリになっているかは、デザインビューとデータシートビューで確認してください。

もうひとつクエリを作ります。
デザインビューで[PC売上_T]とさっき作った[最新データ]を追加して、店番号で結合し、さらに更新回数で結合します。結合線がふたつ出来ます。

これで最新のデータのみを抽出するクエリの出来上がりです。

この二つのクエリを一回で済ませると、#1のSQLになります。クエリを二つに分けていると誤ってクエリ[最新データ]を削除すると動作しなくなるので、出来るだけひとつにしましょう。

三度storkです。

蛇足ですが、先ほどの回答は、SQLを直書きするものだったんで、練習用にGUIでの操作で最新データの取り出し方を補足しておきます。

from句に入っているSQLをクエリとして保存してください。
クエリ名は、[最新データ]
-------------------------------------------
select 店番号,max(更新回数) as max更新回数
from [PC売上_T] group by 店番号
-------------------------------------------
どんなクエリになっているかは、デザインビューとデータシートビューで確認してくだ...続きを読む

Qアクセスのクエリで出生時~小学校就学前を抽出

アクセス2002

クエリにて下記2つの抽出方法を教えて下さい。

【抽出条件1】
出生時~小学校就学前(6歳に達した最初の3月31日まで)

【抽出条件2】
小学生~中学生
(4月1日時点で6歳以上)
(15歳に達した最初の3月31日まで)

[Q_顧客]というクエリを作っています。

5つのフィールドがあります。
氏名・年号・生年・月・日

氏名・年号はテキスト型
生年・月・日は数値型

氏名 年号 生年 月 日
花子 昭和 46 1 15
太郎 平成 15 3 13
春子 平成 17 1 11
次郎 平成 14 6 23
夏子 平成 18 4 29
秋子 平成  9 7 12

上記のクエリから、
・出生時~小学校就学前
・小学生~中学生
の2つを抽出したいのですが、どのようにしたら良いか教えて下さい。

日付型で作成してなく、年齢の出し方も分かりません。
データ数も多いので、困っています。
よろしくお願い致します。

Aベストアンサー

質問は

>日付型で作成してなく、年齢の出し方も分かりません。

ということでよろしいでしょうか?

まず、下記の列を追加します。これは生年月日をまとめて西暦になおしたものです。

生年月日:Format([年号] & [生年] & "年" & [月] & "月" & [日] & "日", "yyyy/mm/dd")

次に、下記の列を追加します。
これは、「年齢計算に関する法律」によって誕生日の前日に満年齢に達することになっているためで、学校教育法の第22条の就学の基準では「子女の満六才に達した日の翌日以降における最初の学年の初から」となっているためです。もし、この年齢ではなく、当日に満年齢になる計算をお望みの場合は、「Date()」だけに修正すればよいです。(基準日がわからないので、動かした当日にしています)

基準日:DateAdd("d",+1,Date())

最後に、下記の列を追加します。

年齢:IIf(Format(生年月日,"mm/dd")>Format(基準日,"mm/dd"), DateDiff("yyyy",生年月日,基準日)-1, DateDiff("yyyy",生年月日,基準日))

上記で年齢の出し方は大体分かるかと思います。
あとは年齢をもとに条件にあう列を追加していくことになるか、上記の年齢計算自体を修正するかになると思います。

質問は

>日付型で作成してなく、年齢の出し方も分かりません。

ということでよろしいでしょうか?

まず、下記の列を追加します。これは生年月日をまとめて西暦になおしたものです。

生年月日:Format([年号] & [生年] & "年" & [月] & "月" & [日] & "日", "yyyy/mm/dd")

次に、下記の列を追加します。
これは、「年齢計算に関する法律」によって誕生日の前日に満年齢に達することになっているためで、学校教育法の第22条の就学の基準では「子女の満六才に達した日の翌日以降における最初の学年の初から」と...続きを読む


人気Q&Aランキング

おすすめ情報