[rank:t]の検索結果



「先頭からn件のレコード(結果セット)だけ取得する方法が知りたい。」というのは、データベース関連のメーリングなどで以前からよくある質問ですが、SQL ServerやOracle、MySQL、PostgreSQLなどRDBやバージョンによって利用可能な方法がそれぞれ異なるので簡単にまとめてみました。


Microsoft SQL Server 7.0 以降


Microsoft SQL Server 7.0 以降 では TOP が使用できるので、

SELECT TOP 10 *
FROM Table1
ORDER BY Field1

と記述することによって、先頭から上位10件の結果セットを取得することができます。

Oracle8i R8.1.5 以降


Oracle8i R8.1.5 以降ではサブクエリー内で ORDER BY が使用できるようになったので、例えば Field1 の昇順に上位10件を取得するような場合は、

SELECT *
FROM (SELECT * FROM Table1 ORDER BY Field1) A
WHERE ROWNUM <= 10;

と記述することによって、先頭から10件の結果セットを取得することができます。

MySQL


MySQLの場合は以下のようにLIMIT句を使用することで、指定した位置(先頭からの場合は0)から指定した件数のレコードを取得することができます。

SELECT * FROM Table1
ORDER BY Field1
LIMIT 0, 10;

PostgreSQL


PostgreSQLの場合は以下のようにLIMITとOFFSETを指定することで、
OFFSETで指定した位置から、LIMIT数分のレコードを取得することができます。

SELECT * FROM Table1
ORDER BY Field1
OFFSET 0 LIMIT 10;

その他のRDB


また、不運にも上記以外の RDB を使用しなければならない場合でも、以下のようなSQL文で、Table1 から Field1 の昇順に Field1, Field2, Field3 の結果セットを先頭から10件取得することができます。

SELECT DISTINCT COUNT(*), A.Field1, A.Field2, A.Field3 FROM Table1 A, Table1 B
WHERE (A.Field1 >= B.Field1)
GROUP BY A.Field1, A.Field2, A.Field3
HAVING COUNT(*) <= 10;

プログラマのためのSQL 第4版
翔泳社 著者:ジョー・セルコ,Joe Celko


amazon.co.jpのカスタマーレビューを見る
powered by amalink


(追記あり)
[148] Posted by kagahiro at 2005/03/21 16:34:00
5 point | Link (17) | Trackback (1) | Comment (4)

HTMLファイルのフォームからPerlのCGIでHTMLファイルを更新し、

print "Location: htmlファイルのURL""\n\n";

でそのHTMLファイルを表示しても、更新前の古い状態で表示されてしまいます。

だからといって、

<body onLoad="location.reload();">

という記述では、リロードの無限ループになってしまいます。

以下のJavaScriptをHTMLファイルに追加することで1回だけリロードすることができるようです。

<script type="text/javascript">
<!--
var __onload_flag = window.onload;
window.onload = function() {
    if (__onload_flag) {
        __onload_flag();
        location.reload();
    }
}
//-->
</script>

[2270] Posted by kagahiro at 2013/02/15 13:47:02
0 point | Link (1) | Trackback (0) | Comment (0)

まずカタカナより比較的プログラミングしやすそうな英数字の全角半角変換から作成します。

半角から全角への変換の処理手順は、

・半角英数字の場合は、同じ全角英数字に置き換えて戻り値として返す文字列に連結
・それ以外の文字の場合はそのまま戻り値として返す文字列に連結

また、全角から半角への変換の処理手順は、

・全角英数字の場合は、同じ半角英数字に置き換えて戻り値として返す文字列に連結
・それ以外の文字の場合はそのまま戻り値として返す文字列に連結

となります。

文字コードはそれぞれ以下の通りですので、これらに該当する文字があったら置き換えを行います。

半角数字:0 - 9
30 - 39

全角数字:0 - 9
EFBC90 - EFBC99
2バイト目まではEFBC

半角アルファベット大文字:A - Z
41 - 5A

全角アルファベット大文字:A - Z
EFBCA1 - EFBCBA
2バイト目まではEFBC

半角アルファベット小文字:a - z
61 - 7A

全角アルファベット小文字:a - z
EFBD80 - EFBD9A
2バイト目まではEFBD

以下が英数字の半角から全角へ、全角から半角への変換を行うコード(プログラム)です。

#!/usr/bin/perl

use strict;
use warnings;
use Encode;

my $hanAlnum = "ABCDEい12345あabcde";
my $zenAlnum = "ABCDEい12345あabcdeカ";

my $zenstr = han2zen_alnum($hanAlnum);
Encode::from_to($hanAlnum, 'utf8', 'cp932');
Encode::from_to($zenstr, 'utf8', 'cp932');
print "$hanAlnum ---> $zenstr\n";

my $hanstr = zen2han_alnum($zenAlnum);
Encode::from_to($zenAlnum, 'utf8', 'cp932');
Encode::from_to($hanstr, 'utf8', 'cp932');
print "$zenAlnum ---> $hanstr\n";

# UTF-8でエンコードされた半角英数字を全角英数字に変換する
sub han2zen_alnum {
    my ($src) = @_;

    my $srclen = length($src);
    my $pos = 0;
    my $dest = '';
    while ($pos < $srclen) {
        my $code = ord substr($src, $pos, 1); # 先頭のASCIIコード値を取得
        my $bytelen = _bytesize($code);

        my $lastbyte = 0;
        my $bytechar = '';
        my $flagged_utf8 = ''; 
        if ($code >= 0x30 && $code <= 0x39) { # 数字
            $lastbyte = 0x90 + ($code - 0x30);
            $bytechar = pack("C3", 0xEF, 0xBC, $lastbyte);
            $dest .= $bytechar;
        }
        elsif ($code >= 0x41 && $code <= 0x5A) { # 大文字英字
            $lastbyte = 0xA1 + ($code - 0x41);
            $bytechar = pack("C3", 0xEF, 0xBC, $lastbyte);
            $dest .= $bytechar;
        
        }
        elsif ($code >= 0x61 && $code <= 0x7A) { # 小文字英字
            $lastbyte = 0x81 + ($code - 0x61);
            $bytechar = pack("C3", 0xEF, 0xBD, $lastbyte);
            $dest .= $bytechar;
        }
        else {
            $dest .= substr($src, $pos, $bytelen);
        }
        $pos += $bytelen;
    }

    return $dest;
}

# UTF-8でエンコードされた全角英数字を半角英数字に変換する
sub zen2han_alnum {
    my ($src) = @_;

    my $srclen = length($src);
    my $pos = 0;
    my $dest = '';

    while ($pos < $srclen) {
        my $code = ord substr($src, $pos, 1); # 先頭のASCIIコード値を取得
        my $bytelen = _bytesize($code);
        my $hit = 0;
        if ($code == 0xEF) { # 全角英数の場合は1バイト目がEF
            my $code2 = ord substr($src, $pos + 1, 1);  # 2バイト目
            my $code3 = ord substr($src, $pos + 2, 1);  # 3バイト目
            if ($code2 == 0xBC) {
                if ($code3 >= 0x90 && $code3 <= 0x99) {
                    $dest .= chr(0x30 + ($code3 - 0x90));
                    $hit = 1;
                }
                elsif ($code3 >= 0xA1 && $code3 <= 0xBA) {
                    $dest .= chr(0x41 + ($code3 - 0xA1));
                    $hit = 1;
                }
            }
            elsif ($code2 == 0xBD) {
                if ($code3 >= 0x80 && $code3 <= 0x9A) {
                    $dest .= chr(0x61 + ($code3 - 0x80));
                    $hit = 1;
                }
            }
        }
        if(!$hit) {
            $dest .= substr($src, $pos, $bytelen);
        }
        $pos += $bytelen;
    }

    return $dest;
}

# 文字のバイト長を求める
sub _bytesize {
    my $code = shift;
    my $size = 1;
    if (0x80 & $code) { # 1バイト文字以外
        $code <<= 1;
        for my $i (2 .. 8) {
            $size++;
            $code <<= 1;
            last if (!(0x80 & $code));
        }
    }
    return $size;
}

[2250] Posted by kagahiro at 2012/12/19 16:54:42
0 point | Link (1) | Trackback (0) | Comment (0)

オープンソースの高速・軽量データベース「MySQL」に関する書籍。入門書や運用管理についての詳細な解説書、リファレンスなど。MySQL 徹底入門 第2版オープンソースのデータベース・サーバー、MySQLのインストールか...
[663] Posted by kagahiro at 2006/06/23 06:27:12
0 point | Link (7) | Trackback (0) | Comment (0)

C言語のstrncpy関数やmemcpy関数ではバイト単位の操作になるので、漢字、ひらがな、カタカナなどの全角文字を文字数で指定して部分文字列を取り出すことができません。そこで半角英数も全角文字も1文字として部分文字...
[2324] Posted by kagahiro at 2013/07/02 11:02:48
0 point | Link (3) | Trackback (0) | Comment (0)

映画やドラマ、アニメ、音楽、お笑いなどの無料動画をFC2動画、YouTube、ニコニコ動画 、Veoh、Dailymotionなどから探す方法を解説。無料動画を探す方法としては、動画検索サイトで探したい動画に関連する任意のキー...
[2169] Posted by kagahiro at 2012/04/18 21:17:19
5 point | Link (15) | Trackback (5) | Comment (0)

Windows 10の無料アップグレードは、予定通り2016年7月29日までで終了し、それ以降にWindows 10にアップグレードする場合は、フルバージョンのWindows 10を買う(Windows 10 Homeへのアップグレードは119ドル)必要が...
[2549] Posted by kagahiro at 2016/05/09 09:54:19
0 point | Link (4) | Trackback (0) | Comment (0)

YouTubeドラマまとめ VideoNaviは、YouTubeなどの各種動画サイトで無料で視聴できる放送中ドラマをはじめ懐かしのドラマや映画を紹介しているブログサイト。YouTubeドラマまとめ ドラマ映画 -VideoNavi-
[1957] Posted by kagahiro at 2010/07/07 17:50:13
0 point | Link (4) | Trackback (0) | Comment (0)

Google マップ(グーグルマップ)日本版は、Googleが提供しているウェブブラウザで利用できる地図検索サービスで、利用者の現在の場所に応じて、基本的な地図またはカスタムの地図を表示できるほか、近くにあるお店や...
[2257] Posted by kagahiro at 2012/12/26 23:03:41
1 point | Link (6) | Trackback (0) | Comment (1)

単にテキストファイル等の文字エンコードを変換するのであれば、iconvコマンドを使用して変換すれば良いのですが、プログラム内部で取得した文字列の文字エンコードを変換したい場合もあります。以下のプログラムはL...
[1982] Posted by kagahiro at 2010/07/26 09:54:29
0 point | Link (2) | Trackback (0) | Comment (0)

  1 2  次へ >


アクセスランキング

今日のアクセスランキング TOP 10

  1. SQLのSELECT文で先頭から上位(TOP)10件のレコードを取得する方法(SQL Server、Oracle、MySQL、PostgreSQL) (70 PV)
  2. ウェブページを1回だけリロード(再表示)する方法 (5 PV)
  3. [Perl]UTF-8でエンコードされた英数字の全角半角変換を行うコード (4 PV)
  4. MySQL [書籍] (3 PV)
  5. [C言語]UTF-8でエンコードされた文字列の部分文字列を取り出すコード (3 PV)
  6. FC2動画やYouTubeなどから無料動画(映画やドラマ、アニメ、音楽など)を探す方法 (3 PV)
  7. Windows 10の無料アップグレードは2016年7月29日まで、「延長は絶対にない」 (3 PV)
  8. YouTubeドラマまとめ ドラマ・映画 -VideoNavi- (1 PV)
  9. Google マップ(グーグルマップ)日本版 (1 PV)
  10. [gcc]iconvで文字エンコードを変換するサンプルプログラム (1 PV)

今月のアクセスランキング TOP 10

  1. SQLのSELECT文で先頭から上位(TOP)10件のレコードを取得する方法(SQL Server、Oracle、MySQL、PostgreSQL) (1934 PV)
  2. ウェブページを1回だけリロード(再表示)する方法 (122 PV)
  3. [C言語]UTF-8でエンコードされた文字列の部分文字列を取り出すコード (107 PV)
  4. Windows 10の無料アップグレードは2016年7月29日まで、「延長は絶対にない」 (96 PV)
  5. FC2動画やYouTubeなどから無料動画(映画やドラマ、アニメ、音楽など)を探す方法 (82 PV)
  6. MySQL [書籍] (70 PV)
  7. ようつべ (YouTube) 動画のダウンロードと保存 (42 PV)
  8. Google News (グーグルニュース)日本版 (39 PV)
  9. グーグルプレイ (Google Play) - Androidアプリ、ゲーム、映画、音楽、書籍 (34 PV)
  10. [gcc]iconvで文字エンコードを変換するサンプルプログラム (32 PV)

アクセス統計

ディレクトリ

関連サイト