• 締切済み

????

以下のクエリを実行しました。 insert into test_tbl(aaa,bbb,ccc) values('xx','yy','△△'); ※====『△』は半角スペース==== それで以下のsqlを実行すると select count(*) from test_tbl where ccc = '△△'; --- 1 --- と出ます。それで今度は以下のSQLを記述すると select count(*) from test_tbl where ccc = '△'; --- 1 --- とでます。 因みにテーブル構成は -------------- aaa char(2) bbb char(2) ccc char(2) -------------- です。 どうしてインサートしたデータが"△△"なのに "△"でひっかかるのでしょうか? しつこいようですが、記述中の'△'は半角スペースです。

みんなの回答

  • jmh
  • ベストアンサー率23% (71/304)
回答No.4

比較の前に、'△' が char(2)-型に暗黙的に型変換されるからだと思います。 リテラルの '△' は、char(2)-型の ccc と比較される前に char(2)-型に型変換されて '△△' になり、それから ccc と比較されるのではないでしょうか?

全文を見る
すると、全ての回答が全文表示されます。
  • yuji
  • ベストアンサー率37% (64/169)
回答No.3

ANo#1の方と同じくDBによると思いますが、 Oracleの場合、SQL*Plusでご質問のようなことを行うと、 同じ結果になります。 SQL*Plusの方で ' '(空白1つ) の場合に、' '(空白2つ)と補完しているのか なんなのかわかりませんが、とにかく' ' でも ' ' でも同じ結果になります。 ただし、JDBCなど他のミドルウェアを使用して検索を行った場合は、 ' ' のみひっかかります。' 'ではひっかかりません。

全文を見る
すると、全ての回答が全文表示されます。
  • teiou68k
  • ベストアンサー率28% (202/721)
回答No.2

ごめんなさい。勘違いして頓珍漢な回答をしてしまいましたm(__)m とりあえずDBは記述した方がよいかと思います。

全文を見る
すると、全ての回答が全文表示されます。
  • teiou68k
  • ベストアンサー率28% (202/721)
回答No.1

DBはなんでしょう?それにもよる気がしますが・・・。 今、手元にあるのはAccess2kとSQL Serverですが、Accessには char型がないので、SQL Serverだったと仮定すると・・・。 Char型の場合はchar(2)とした場合、"A"を代入しても"A "と 格納されてしまいますね。もし"A"を代入して"A"と格納されて 欲しい場合は、varchar(2)とするなどしたら良いのでは?

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • MySQLでWHEN句のサブクエリ中にて

    MySQL ver.5.0.95です。 PHPからSQL文を作ってDBへインサートしているのですが 重複した値が合った場合はupdateするように書いています。 TBL1には |id   |string   |count 1    aaa    0 2    bbb    3 3    ccc    1 TBL2には |id2    |string2    |count2 1      aaa      0 2      bbb      2 3      ccc      1 実際はもう少し複雑ですが、こういう感じでデータが入ってるとします。 このとき、TBL1のそれぞれをインサート若しくはアップデートするのに TBL2の同一IDのものの、count2の状態によって場合分けしたく 同一IDのcount2が1以上なら変更しない、という風にするため以下のように書いたのですが insert into TBL1 values (1, "aaa", 3), (2, "bbb", 3), (3, "ccc", 3), (4, "ddd", 3) on duplicate key update count = CASE WHEN (select count2 from TBL2 where id2 = values(id)) >=1 THEN count ELSE count + values(count) END; #1064 - You have an error in your SQL syntax;というエラーになって出来ません。 WHENの中のサブクエリで、where id2 = values(id) 恐らくこの文がダメなようです。 例えば決め撃ちで1つ1つ書くと通ります。 insert into TBL1 values(1, "aaa", 3) on duplicate key update count = CASE WHEN (select count2 from TBL2 where id2 = 1) >=1 THEN count ELSE count + values(count) END; insert into TBL1 values(2, "bbb", 3) on duplicate key update count = CASE WHEN (select count2 from TBL2 where id2 = 2) >=1 THEN count ELSE count + values(count) END; insert into TBL1 values(3, "ccc", 3) on duplicate key update count = CASE WHEN (select count2 from TBL2 where id2 = 3) >=1 THEN count ELSE count + values(count) END; insert into TBL1 values(4, "ddd", 3) on duplicate key update count = CASE WHEN (select count2 from TBL2 where id2 = 4) >=1 THEN count ELSE count + values(count) END; これをエラーになったような文に変えて1文にまとめたいのですが、無理でしょうか? あとそもそもこれをまとめたほうが速いと思ってそうしたいのですが、 変わらないのなら1文1文;でつなげて書くやり方でいこうと思っています。 まとめると速くなることはあるでしょうか?

    • ベストアンサー
    • MySQL
  • 重複レコードの抽出について

    以下のようなテーブルからmailが重複していてnameの値が全て同じ値を持つレコードを取得するためのSQL文を教えてください。 mail | name ----------- aaa | 01 aaa | 01 aaa | 01 bbb | 02 bbb | 02 bbb | 01 ccc | 01 ccc | 01 ccc | 02 select * from test where mail in (select mail from test where mail group by mail having count(mail)>1) 上記のSQL文だと以下のデータが取得されてしまいます。 ↓ mail | name ----------- aaa | 01 ○ aaa | 01 ○ aaa | 01 ○ bbb | 02 × bbb | 02 × ccc | 01 × ccc | 01 × ○印のみ取得したいのですが、 SQL文をどのように修正すればよいのでしょうか。 よろしくお願いいたします。

  • SQLの結果に納得できません。どなたか解説していただけないでしょうか。

    あるSQLの実行結果がどうも納得できないのです。 こちらで詳しい方に解説していただけたらと思い投稿しました。 以下SQL1の実行結果ですが、なぜ'A'の後ろに半角スペースが入ってしまうのでしょうか? とりあえず私はSQL2のように書き直して本番のSQLは対応しました。 しかし、なんともスッキリできないのです・・・。 (前提条件) customerテーブルは10件あるとします。 (SQL1) select 'A'|| (select to_char(count(*),'000') from customer) expr1 from dual; (SQL1結果) 'A'の後ろになぜか半角スペースが入ります。 expr1 ------- A 010 (SQL2) select 'A'|| trim((select to_char(count(*),'000') from customer)) expr1 from dual (SQL2結果) 'A'の後ろに半角スペースは入りません。 expr1 ------- A010 以上よろしくお願いします。

  • 副問い合わせのinsert文

    いつもお世話になっています。 insert文の副問い合わせのことでお聞きしたいのですが、 ■通常のinsert文 insert into AAA values(aaa,bbb,ccc); 上記のsqlを副問い合わせにした場合(aaaに別テーブルからの検索結果を入れたい場合)どういうSQL文になるでしょうか。 参考書等を参照すると、副問い合わせの場合はvaluesを省略する(使えない?)と記述がありました。 insert into AAA values ( aaa IN (SELECT bbb from BBB where ccc = ddd),bbb,ccc); とはできないみたいですので… どうかご教授宜しくお願いします。

  • oracleからSQL Serverへの移行

    oracleからSQL Serverへ移行することになったのですが、副問い合わせで定義したテーブル同士を外部結合するSQL構文が、うまく実現できず、ご教授して頂きたくよろしくお願いします。 下記、oracle 構文をSQL Server構文へ書き換えたい。 select * from (select cal1,cal2,cal3 from tbl1,tbl2 where cal1 >100) aaa, (select cal1,cal2,cal3 from tbl1,tbl2 where cal1 <=100) bbb, tbl3 where aaa.cal1 = bbb.cal1(+) and aaa.cal2 = bbb.cal2(+) and aaa.cal3 = bbb.cal3(+) and aaa.cal1 = tbl3.cal1 よろしくお願いします。

  • 集計関数の合計について

    お世話になります。 SQLSever2005を使用しています。 Count(*)で月毎のデータ件数を集計し、またその結果を出力するSQLを考えております。 SELECT  (SELECT Count(*) FROM TBL_TEST T1 WHERE T1.T_DATE>='2005/01/01' AND T1.T_DATE=<'2005/01/31') AS CNT_1,  (SELECT Count(*) FROM TBL_TEST T2 WHERE T2.T_DATE>='2005/02/01' AND T2.T_DATE=<'2005/02/31') AS CNT_2,   (SELECT Count(*) FROM TBL_TEST T3 WHERE T3.T_DATE>='2005/03/01' AND T3.T_DATE=<'2005/03/31') AS CNT_3,   (CNT_1+CNT_2+CNT_3) AS TOTAL_CNT ・・・・・・・・・・・・ (★)  FROM TBL_TEST T  WHERE ・・・・・・・・・ 結果(★)のところで『CNT_1は無効です』というエラーになってしまいます。 ちなみにAccessではエラーにならずに結果を出力していました。 上記のSQL文はどのように修正すればよろしいでしょうか?

  • 大文字/小文字の区別しないで検索したい場合

    データベース:ORACLE9i いつもお世話になっています♪ いきなり質問ですが、 例えばこういうデータがテーブルに 入っているとします。 ID  NAME ----------- 1 AAA1 2 BBB2 3 CCC3 ----------- そこで下記のSQLを実行するとBBB2はヒットしません。 select * from test_tbl where name like '%b%'; 大文字/小文字を区別しないで検索する方法はないでしょうか? よろしくお願いします♪

  • ANDとかORとかを書く位置

    ネットで調べてみても見つからないので皆さんに質問させて下さい。 SQLで結合条件を記述する際、よく仕事現場で見かけるのは以下のような 書き方です。 SELECT うんたら FROM  かんたら WHERE  A = AAA AND   B = BBB OR   C = CCC しかし、個人的にこれは嫌いです。 何故なら結合条件はWHEREの配下に存在するものであり、WHEREと同列 ではないはずだからです。 なので、私が書くとこうなります。 SELECT うんたら FROM  かんたら WHERE  A = AAA AND     B = BBB OR     C = CCC もしくは、そんな書き方しませんが・・・。 SELECT うんたら FROM  かんたら WHERE  A = AAA     AND     B = BBB     OR     C = CCC ここで、最初に示した書き方に最もな理由が知りたいと思います。 好みの問題なのかもしれませんが・・・。 投稿時のインデントが上手くいかないのでいいように解釈して下さい(笑)

  • PL/SQL)Functionの引数(文字列)をWHERE文に記述する方法

    PL/SQLで、Functionの中で実行するselect文のWhereに、Functionの 引数で受けとった値をセットしようとしています。 この引数が文字列(VARCHAR2型)の場合、どのようにWHEREで、記述したらよいのでしょうか? ご教授のほどをよろしくお願いします。 CREATE OR REPLACE FUNCTION Fn_TBL_AAA (psCODE IN VARCHAR2) IS CURSOR TBL_AAA_CUR IS SELECT * FROM TBL_AAA WHERE BBB = psCODE ; TBL_AAA_REC TTBL_AAA_CUR%ROWTYPE;       :       : ※上記のように記述すると、実行ではエラーが発生しないのですが、  取得したい結果が返ってきません。TABLE(TBL_AAA)のBBBは、  VARCHAR2なので、通常のSQL*PLUSのSELECT文ではBBB = psCODE  はBBB = 'psCODE'のように [']で括るのですが、PL/SQLの  FUNCTION内ではどのように記述すればよいのかが  わかりません。 以上、よろしくお願いいたします。

  • ストアドのselect文で別テーブルのカウントを取得するには

    こんばんは。 以下のようなことをするのにどう記述していいのか わかりません。 入力パラメータ test1,test2に一致するテーブル1のレコードの 項目1と項目2の値と test1,test2に一致するテーブル2のレコードの カウントを 返したいと考えていますがどう記述したら テーブル2のカウントを返せるのかわかりません。 以下、考え中の内容を記述したものです。 テーブルTBL_AとテーブルTBL_Bがある。 TBL_Aの項目はFLD_1,FLD_2,FLD_3 TBL_Bの項目はFLD_1,FLD_2,FLD_3,FLD_4 TBL_AとTBL_Bには同一のフィールドFLD_1,FLD_2があり、 select FLD_1,FLD_2,FLD_3 FROM TBL_A WHERE FLD_1 = test1 AND FLD_2 = test2(select文1) 上記のSQLでTBL_AのFLD_1,FLD_2を取得する ここに、 select count(*) FROM TBL_B WHERE FLD_1 = test1 AND FLD_2 = test2(select文2) このselect文2で取得した値を select文1に接続して値を戻したいのですが やり方がわかりません。 戻したい値はTBL_AのFLD_1,FLD_2,FLD_3とTBL_Bのカウントです。 お分かりになる方教えてください。よろしくお願いします。 なおoracleは9iを使っています。

このQ&Aのポイント
  • A3キャリアシートをPFUから購入した後、ScanSnap iX1500で読み込もうとすると、キャリアシートに対応していないとエラーメッセージが表示されます。
  • 購入したA3キャリアシートはiX1500対応品であり、製品自体に問題はありません。
  • この問題の解決策としては、ScanSnap iX1500のファームウェアを最新バージョンにアップデートすることや、PFUのサポートに問い合わせることがあります。
回答を見る