33 件中 1 - 10 件を表示
次の 10 件 »
Displaying posts with tag: Firebird/InterBase (reset)
FirebirdでFLOATを使(う|わない)理由

FirebirdでFLOATを使(う|わない)理由

本エントリはFirebird Advent Calendar 2017の22日目です。

私の本業(=家のローン払いに一番貢献している収入)はMySQLなので、最近以下のエントリを読んでモヤっとしてました。

MySQLで6桁までの小数点を丸めずに扱うならFLOAT型を使うべき理由(Qiita)

時間があったらコメントしないとなー、と思ってたら、すでに以下のエントリができてました。多謝。

MySQLのFLOAT型を使う理由が見つからない件(hnwの日記)

[さらに読む]
DISTINCT, COUNT, そしてNULL

本エントリはFirebird Advent Calendar 2017の14日目です。

DISTINCT, COUNT, そしてNULL

唐突ですが、次の文章のうち間違っているものは? SELECT文で。。。。

(1) 行数を数えるときにはCOUNT(*)
(2) 行数を数えるときにはCOUNT(カラム名)でも(1)と同じ
(3) カラムのユニークな行数を数えるときはCOUNT(DISTINCT カラム名)
(4) 複数カラムのユニークな行数を数えるときはCOUNT(DISTINCT カラム名1, カラム名2)

じゃ確認してみましょう。

create table t1(i1 int, i2 int);
insert into t1 values(1,1);
insert into t1 values(1,2);
insert into t1 values(2,3);
select count(*) from t1;

COUNT
=====================
3

[さらに読む]
Firebird CTEでFizzBuzz

Firebird CTEでFizzBuzz

本エントリはFirebird Advent Calendar 2017の13日目です。

DEKOさんが以下のエントリを書いていたので、それのCTE(Common Table Expression)版を作ってみました。

Firebird SQL のストアドプロシージャで FizzBuzz(FizzBuzz Advent Calendar 2017)

WITH RECURSIVE my_cte AS
(
SELECT 1 AS i from rdb$database
UNION ALL
SELECT 1+i FROM my_cte WHERE i )
SELECT CASE
WHEN (mod(i,3)=0) AND (mod(i,5)=0) THEN 'Fizz Buzz'
WHEN mod(i,3)=0 THEN 'Fizz'
WHEN mod(i,5)=0 THEN 'Buzz'
ELSE i END
FROM my_cte;

実行するとこんな感じ。

CASE
==========
1 …

[さらに読む]
Firebirdでデータの歯抜けを探す(NULLあり、の続き)

Firebirdでデータの歯抜けを探す(NULLあり、の続き)

本件はFirebird Advent Calendar 2017の11日目です。

一昨日のブログ書いてから気づいたんですが、以下の条件に加えてもうひとつ条件がありました。

条件1: seqは整数
条件2: seqは1からはじまり、1ずつ増えていく連番
条件3: seqはNULLではない。
条件4: (seq+1)はオーバーフローしない
条件5: seqは重複しない

つまり、seqをINTEGERで宣言すると条件1を満たし、さらにUNIQUE制約をつけると条件5、
さらにPRIMARY KEYにすれば条件条件3, ダメ押しでMySQLでいう「AUTO_INCREMENT」的な

[さらに読む]
Firebirdの分析関数の衝撃(1)row_numberでデータの歯抜けを探す

MySQLも8.0からWindow関数が実装され、これでオープンソースRDBMS御三家すべてでWindow関数が利用できるようになります。(PostgreSQLは8.4から、Firebirdは3.0から実装済み)

今後は各種SQL本でも、Window関数が普通に掲載され、普通に利用されてくると思いますので、
ここではミックさんや山岸さんが扱わない(たぶん)Firebirdでの利用について、検証・紹介しておきます。

1.データの歯抜けを探す(Window関数を使わない方法)

データの歯抜けを探す方法はミックさんの「HAVING句の力(CodeZine)」記事にて説明されています。

FirebirdでもWindow関数を持たない3.0より前のバージョンでは、この方法が使えます。以下のテーブルを

[さらに読む]
使い慣れたSQLに潜む実装依存: Firebirdの場合(12) UPDATE文による主キーの入れ替え

本エントリはFirebird Adventcalendar 2016の17日目です。

使い慣れたSQLに潜む実装依存:3.構文とトランザクション UPDATE文による主キーの入れ替え

まぁMySQLと同じでだめな感じですorz 素朴な実装なので。。。。

SQL&gt create table table1(c1 int primary key);
SQL&gt insert into table1 values(1);
SQL&gt insert into table1 values(2);
SQL&gt update table1 set c1 = case c1 when 1 then 2 when 2 then 1 end;
Statement failed, SQLSTATE = 23000
violation of PRIMARY or UNIQUE KEY constraint "INTEG_15" on table "TABLE1"
-Problematic key value is ("C1" = 2)

[さらに読む]
使い慣れたSQLに潜む実装依存: Firebirdの場合(10) ORDER BY でのNULLの扱い

本エントリはFirebird Adventcalendar 2016の17日目です。

使い慣れたSQLに潜む実装依存:3.構文とトランザクション ORDER BY

最新のFirebird 3.xでは、MySQL, SQL serverと同様にNULLは最小として扱われます。

SQL&gt create table table_name(column_name int);
SQL&gt insert into table_name values(1);
SQL&gt insert into table_name values(2);
SQL&gt insert into table_name values(3);
SQL&gt insert into table_name values(null);
SQL&gt insert into table_name values(null);
SQL&gt comiit;

SQL&gt select * from table_name order by 1;

COLUMN_NAME
============
&ltnull&gt

[さらに読む]
使い慣れたSQLに潜む実装依存: Firebirdの場合(7) INSERT時のスペース

本エントリはFirebird Adventcalendar 2016の10日目です。

使い慣れたSQLに潜む実装依存:2.データ型と演算子 INSERT時のスペース

ここでもFirebirdは多数側、つまりOracleとVertica以外のRDBMSと同じ結果を返します。

SQL&gt create table table1(c1 char(3),c2 varchar(3));
SQL&gt insert into table1 values('ABC ','AB ');
SQL&gt select * from table1;

C1 C2
====== ======
ABC AB

ちょっとわかりにくいので、c2にちゃんと後続のスペースがついているかどうか確認すると。。。

SQL&gt select octet_length(c1),octet_length(c2) from table1;

OCTET_LENGTH …

[さらに読む]
使い慣れたSQLに潜む実装依存: Firebirdの場合(6) 文字列との結合演算子

本エントリはFirebird Adventcalendar 2016の8日目です。

使い慣れたSQLに潜む実装依存:2.データ型と演算子 文字列の結合演算子

Firebirdの場合、ここでの多数を占めるように結果はNULLとなります。
またCONCAT関数はありません。

SQL&gt select null || 'ABC' from rdb$database;

CONCATENATION
=============
&ltnull&gt

SQL&gt select concat(null,'ABC') from rdb$database;
Statement failed, SQLSTATE = 39000
Dynamic SQL Error
-SQL error code = -804
-Function unknown
-CONCAT

[さらに読む]
使い慣れたSQLに潜む実装依存: Firebirdの場合(6) 文字列との結合演算子

本エントリはFirebird Adventcalendar 2016の8日目です。

使い慣れたSQLに潜む実装依存:2.データ型と演算子 文字列の結合演算子

Firebirdの場合、ここでの多数を占めるように結果はNULLとなります。
またCONCAT関数はありません。

SQL&gt select null || 'ABC' from rdb$database;

CONCATENATION
=============
&ltnull&gt

SQL&gt select concat(null,'ABC') from rdb$database;
Statement failed, SQLSTATE = 39000
Dynamic SQL Error
-SQL error code = -804
-Function unknown
-CONCAT

[さらに読む]
33 件中 1 - 10 件を表示
次の 10 件 »