関数:LOWER が変換してくれない

このQ&Aのポイント
  • lower関数を使用しても変換されない問題が発生しています。
  • 探してみたが、原因がわからず困っています。
  • どなたか教えていただけますでしょうか。
回答を見る
  • ベストアンサー

関数:LOWER が変換してくれない

ver. 4.1.12 lower関数を以下のように使用しても変換されません。 mysql> select lower(hex(encode(1000,"a"))); +------------------------------+ | lower(hex(encode(1000,"a"))) | +------------------------------+ | C4DF4692 | +------------------------------+ 1 row in set (0.00 sec) ただし、以下のように使うと変換できる。 mysql> select lower(b.a) from (select hex(encode(1000,"a")) as a) b; +------------+ | lower(b.a) | +------------+ | c4df4692 | +------------+ 1 row in set (0.00 sec) いろいろ探してみたのですが原因がわかりません。 ご教授のほどよろしくお願いします。

  • MySQL
  • 回答数1
  • ありがとう数2

質問者が選んだベストアンサー

  • ベストアンサー
回答No.1

ほんとかな?と思ったので、やってみると確かになりますね。。 hex関数までは上手くいっているので、lower関数だと思うのですが、 こうすると上手くいきました。 select lower(cast(hex(encode(1000,"a")) as char)); lower関数は文字列を変換するので、castでcharに変換。 これで上手くいくので、HEXが文字列で返していないのかな?と思い。ドキュメント(参考URL)を確認すると、文字列表現を返す。。。。 文字列表現とは?文字列ではないのかな? と疑問になりましたが、自分はここまでしか分りませんでした。。 HEXでの戻り型の違いによるものだと思うのですが・・。。 すみません。参考になればと思います。。

参考URL:
http://dev.mysql.com/doc/refman/4.1/ja/string-functions.html
hobbypoppy
質問者

お礼

回答ありがとうございます。 そうなんですよ。HEXまではうまくいってるんですよね。 しかし、CASTを使うことは全く思いつきませんでした。 "文字列表現"って微妙な表現が気にはなりますが、 大変助かりました。ありがとうございました。

関連するQ&A

  • Mysql ストアドファンクション 意図しない結果

    以下の通りストアドファンクションを作成しました。 関数名:fgetLineNew インパラメータ:shop Varchar 8 ※1つだけ。。。 戻り値: Int 11 <ソース> BEGIN DECLARE pline INTEGER(11) DEFAULT NULL; SELECT COUNT(1) INTO pline FROM `hoge` WHERE `SHOP` = shop; IF pline IS NULL THEN SET pline = 10000; END IF; RETURN pline; END 上記のように、作成したストアドファンクションですが、 どんな引数を入れても、戻り値が全ての行(817行)になってしまいます。 以下を参照。 Where区がまったく働いていないのですが、何が原因なのでしょうか。 教えてください。 <ストアドファンクション実行> mysql> select fgetLineNew(1); +----------------+ | fgetLineNew(1) | +----------------+ | 817 | +----------------+ 1 row in set (0.01 sec) mysql> select fgetLineNew(525); +------------------+ | fgetLineNew(525) | +------------------+ | 817 | +------------------+ 1 row in set (0.01 sec) mysql> select fgetLineNew(101); +------------------+ | fgetLineNew(101) | +------------------+ | 817 | +------------------+ 1 row in set (0.00 sec) mysql> select fgetLineNew(525); +------------------+ | fgetLineNew(525) | +------------------+ | 817 | +------------------+ 1 row in set (0.00 sec) mysql> select fgetLineNew('525'); +--------------------+ | fgetLineNew('525') | +--------------------+ | 817 | +--------------------+ 1 row in set (0.01 sec)

    • ベストアンサー
    • MySQL
  • MySQL 5.1 のCHAR(M)型に関して

    MySQL 5.1の CHAR(M)型のMは「文字数」でしょうか?それとも「バイト数」でしょうか? 教えて頂けませんか? 自分の認識では「文字数」と思っているのですが、下記のような現象が発生しております。 mysql> mysql> mysql> mysql> mysql> SHOW CREATE TABLE TEST\G; *************************** 1. row *************************** Table: TEST Create Table: CREATE TABLE `TEST` ( `MOJI` char(6) DEFAULT NULL ) ENGINE=InnoDB DEFAULT CHARSET=utf8 1 row in set (0.01 sec) ERROR: No query specified mysql> mysql> SELECT * FROM TEST; Empty set (0.00 sec) mysql> mysql> INSERT INTO TEST (MOJI) VALUES ('ああああ'); Query OK, 1 row affected, 1 warning (0.00 sec) mysql> mysql> SELECT * FROM TEST; +--------+ | MOJI | +--------+ | ああ | +--------+ 1 row in set (0.00 sec) mysql> mysql> INSERT INTO TEST (MOJI) VALUES ('abcdef'); Query OK, 1 row affected (0.00 sec) mysql> mysql> SELECT * FROM TEST; +--------+ | MOJI | +--------+ | ああ | | abcdef | +--------+ 2 rows in set (0.00 sec) mysql> mysql> mysql> mysql> 環境はCentOS 5.5 で、OSの文字コードもMySQLの文字コードも「utf8」としています。 どうかご教授下さい。

  • MySQLのテーブル連結でクエリに4分以上かかる

    初めまして、よろしくお願いします。 現在PHPよりアクセスするクエリを作成しています。 mysql> select distinct titles.culumn1, title from articles, titles where user = 'userid' and articles.culumn1 = titles.culumn1 and datetime like '2007-11-18%'; Empty set (4 min 42.79 sec) 上記のようなSQL文を作ってPHPからとCLIのmysqlから実行してみたところ、どちらも結果が出るまでに4分以上かかってしまいます。 テーブル内のレコード数としては以下のようになっています。 mysql> select count(*) from articles; +----------+ | count(*) | +----------+ | 738338 | +----------+ 1 row in set (0.00 sec) mysql> select count(*) from titles; +----------+ | count(*) | +----------+ | 34821 | +----------+ 1 row in set (0.00 sec) できればこのクエリの時間を4分から3秒程度にまで短縮したいと考えています。 これは、やはりハードウェアの性能限界なのでしょうか? またはテーブルの連結をせずに一つのテーブルにまとめてしまった方がいいのでしょうか? どなたかヒントでも頂ければ幸いです。 ぜひ、よろしくお願い致します。

    • ベストアンサー
    • MySQL
  • Create Eventに関して

    Create Eventで1秒毎に繰り返し、更新を行うようなイベントを作成したいのですが、 下記のようにSQLを記述しましたが、実行されていないようです。 mysql.eventテーブルを調べてみたところ、startsが9時間ずれています。 単純に、select NOW()で時間を見てみると時間はずれていないのですが、 Create Event内でNOW()関数を使うとずれてるようです・・・・ 解決策がわからず困っております。 ご教授の程よろしくお願いします。 mysql> Create Event Test.MyEvent On Schedule Every 1 SECOND STARTS NOW() Do Update Test.TestTable Set b = b + 1 Where a = 2; Query OK, 0 rows affected (0.00 sec) mysql> select * from mysql.event\G *************************** 1. row *************************** db: Test name: MyEvent body: Update Test.TestTable Set b = b + 1 Where a = 2 definer: root@localhost execute_at: NULL interval_value: 1 interval_field: SECOND created: 2010-11-16 22:44:32 modified: 2010-11-16 22:44:32 last_executed: NULL starts: 2010-11-16 13:44:32 ends: NULL status: ENABLED on_completion: DROP sql_mode: comment: originator: 0 time_zone: SYSTEM character_set_client: utf8 collation_connection: utf8_general_ci db_collation: utf8_general_ci body_utf8: Update Test.TestTable Set b = b + 1 Where a = 2 1 row in set (0.00 sec) mysql> select NOW(); +---------------------+ | NOW() | +---------------------+ | 2010-11-16 22:44:32 | +---------------------+ 1 row in set (0.00 sec)

    • ベストアンサー
    • MySQL
  • MySQLのサブクエリーでエラーがでます

    現在MySQLを使って開発をしています。 SQLもMySQLもまだあまり使ったことがないのでなにか大きな勘違いをしている かもしれませんが、自分で作ったデータベースにMysqlコマンドでアクセスし、 以下のようにselectを行うとsyntaxエラーが発生します。 mysql> select CREATE_DATE from user where cust_id = (select cust_id from customer where memo = 'memo'); ERROR 1064: You have an error in your SQL syntax near 'select cust_id from customer where memo = 'memo')' at line 1 しかしサブクエリーの内容も、その前のselectもそれぞれ下記のように単体で実行すると正常に動作するので、文法的には間違っていないと思います。 ERROR 1064のsyntaxエラーは何を指しているのでしょうか? ぜひご教示ください。 mysql> select cust_id from customer where memo = 'memo'; +---------+ | cust_id | +---------+ | 1 | +---------+ 1 row in set (0.00 sec) mysql> select CREATE_DATE from user where cust_id = '1'; +-------------+ | CREATE_DATE | +-------------+ | 2001-07-23 | +-------------+ 1 row in set (0.00 sec)

  • PHP MySQLでエラーがでてしまいます。

    PHP MySQLからデータを取得したいのですが、以下のエラーが出てしまい原因が分かりません。 詳しい方お願い致します。 <b>Warning</b>: json_encode() expects exactly 1 parameter, 2 given in <b>/home/users/2/***.**-********/web/****************/php/seupPharmacyData.php</b> on line <b>21</b><br /> エラーが出るコードは以下になります。 <?php include "db.php"; $sql = "SELECT * FROM user_data"; $query = mysql_query($sql, $db) or die("クエリの送信に失敗しました。<br />SQL:".$sql); $result= array(); while ($row = mysql_fetch_object($query)) { $result[] = array( 'name1' => $row->name1, 'name2' => $row->name2, 'name3' => $row->name3, 'id' => $row->id, ); } //jsonとして出力 header('Content-type:application/json; charset=UTF-8'); echo json_encode($result,JSON_UNESCAPED_UNICODE); ?>

    • ベストアンサー
    • PHP
  • 検索の秒数表示について

    PerlでMySQLのデータベースを作ろうと思っていますが、検索に掛かった秒数を表示させる為に何かMySQLコマンドみたいなものはありますか?Windowsのプロンプト上でMySQLを実行し検索すれば、「row in set (0.02 sec) 」と表示されますのでこれを表示させたいと思っています。宜しくお願いします。

    • ベストアンサー
    • MySQL
  • MAX_ROWSが反映されていない?

    Mysql5.0.22-standardで65535行では足りないため増やそうとしています。 一応 truncate table test5; とした後に ALTER TABLE test5 MAX_ROWS=1000000000 AVG_ROW_LENGTH=10000;で Query OK, 0 rows affected (0.01 sec) Records: 0 Duplicates: 0 Warnings: 0 と出るのですが、 PHPで検査のためにデータを登録させていくと65535行でエラーが出て、 SELECT COUNT(*) FROM test5; +----------+ | COUNT(*) | +----------+ | 65535 | +----------+ 1 row in set (0.00 sec) の状態です。 反映するために何かコマンド必要なのでしょうか?

  • ひらがなの検索結果が正常ではない

    初めての投稿です よろしくお願いします MySQLにてひらがなが入っているカラムでorder byしても予想に反します。文字コードが原因だとは思うのですが、MySQLの設定方法がよく分かっていません。ご指導、よろしくお願いします。 --- MySQLサーバーはLinux Windowsからターミナルにてテーブル作成、データ入力およびselectを実行 mysql> show columns from HOGE; +-----------+-------------+------+-----+ | Field | Type | Null | Key | +-----------+-------------+------+-----+ | id_c | int(11) | | PRI | | hoge_name | varchar(20) | YES | | +-----------+-------------+------+-----+ 2 rows in set (0.00 sec) mysql> select * from HOGE; +------+------------------+ | id_c | hoge_name | +------+------------------+ | 1 | あいうえお | | 2 | かきくけこ | | 7 | まみむめも | +------+------------------+ 11 rows in set (0.00 sec) mysql> select * from HOGE order by hoge_name; +------+------------------+ | id_c | hoge_name | +------+------------------+ | 7 | まみむめも | | 1 | あいうえお | | 2 | かきくけこ | +------+------------------+ 11 rows in set (0.00 sec)

    • ベストアンサー
    • MySQL
  • MYSQL バイナリデータ変換取得

    以下のようなbatでunhex(`idm`)を使って変換しているのですが、出力されるデータが他のところも変換されて出力されます。どうしてでしょうか? characterの設定か、SQLがだめなのでしょうか? ECHO OFF SET MYSQLPATH="C:\Program Files\MySQL\MySQL Server 5.0\bin" SET character SET sjis;>create_sql.sql ECHO select unhex(`idm`),a.emp_code,a.emp_name_kana from a,b where b.emp_code=a.emp_code into outfile "C:/master.csv" fields terminated by ',';>>create_sql.sql %MYSQLPATH%\mysql.exe -u root -proot test<create_sql.sql exit

    • ベストアンサー
    • MySQL