「夫を成功」へ導く妻の秘訣 座談会

テスト用に簡単なテーブルを作成してみました。

テーブル名:timetest

フィールド:
test_id : integer NOT NULL
test_date : timestamp without time zone

テストデータとして

1,2005-11-15 14:01:40.026
2,NULL
3,2005-11-14 11:11:11.001


このときに test_date がNULL以外のものだけを選択したいのですが、

slect * from timetest where test_date != null;

では1件も選択されず、

select * from timetest where test_date != '';

では、
ERROR: invalid input syntax for type timestamp: ""
というエラーになってしました。

どなたかご教授お願い致します。

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

A 回答 (2件)

IS NULL演算子を使ってみてはどうでしょうか?


書式は「カラム名 IS NULL」


NULL以外のものであれば、

SELECT * FROM timetest WHERE test_date IS NOT NULL

とすれば、「NULL以外のデータ」という事になります。
    • good
    • 0
この回答へのお礼

ありがとうございました。上手くいきました。

お礼日時:2005/11/15 14:41

nullの判定は「=」や「!=」ではなく「is null」「is not null」で行います。



select * from timetest where test_date is not null;
    • good
    • 0
この回答へのお礼

ありがとうございました。「is no null」失念しておりました・・・

お礼日時:2005/11/15 14:42

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

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

このQ&Aを見た人はこんなQ&Aも見ています

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

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

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

Q日付型項目のNULLについて(PostgreSQL)

よろしくお願いします。

下記内容のtest_tableを作成して
----
CREATE TABLE "test_table" (
"id" varchar(10) NOT NULL,
"fdate" date
);
----

下記内容のデータを登録しました。
----
insert into test_table(id,fdate) values ('abc',NULL);
----

下記のsqlでデータを取得できませんでした。
どうしてでしょうか?
select * from test_table where fdate = NULL;

Aベストアンサー

select * from test_table where fdate = NULL;
ではなく
select * from test_table where fdate is NULL;
でお試し下さい。

Qtimestampのデータはどのようにして入力

するのでしょうか?

create table tablex(no serial primary key,time timestamp);

insert into tablex(time) values(?);

において?の部分に入れる文字列のフォーマットはどうなるのでしょうか?

例えば
2005年5月5日5時55分55秒
を入れるにはどうしたらいいのでしょうか?

Aベストアンサー

'2005-05-05 05:55:55'

Q日付型のフィールドに空白を入れる方法を教えてください

ASP(VBScript)でSQLサーバにINSET INTO文を使ってデータを格納しているのですが、日付の部分がNULLの時、「1900/1/1」が入ってしまいます。
そのまま、空白を入れる方法はどうやったらよろしいのでしょうか?

TABLE1の内容は
番号|内容|日付です。

INSERT INTO TABLE1 VALUES ( 1, 'あいう', '')

結果
1|あいう|1900/1/1

Aベストアンサー

あとは、プログラムの書き方次第ですね、、、


If hensu=Null Or hensu="" Then
dt = "NULL"
Else
dt = "'" & hensu & "'"
End IF

E_SQL = "INSERT INTO TABLE1 VALUES & _
"( 1,'あいう', " & dt& ")"
の様に書きます。

Qdate型でのbetweenについて教えてください。

皆様、新年明けましておめでとうございます。

早速ですが、date型でのbetweenについて教えてください。

SQL文
SELECT * FROM test WHERE date between date '2007-12-01' and date '2007-12-31'

を発行すると、2007-12-31のレコードがあるのに該当しません・・・

試しにSQL文を
SELECT * FROM test WHERE date between date '2007-12-01 00:00:00' and date '2007-12-31 23:59:59'
としても2007-12-31のレコードは検索されません・・・
SQL文を
SELECT * FROM test WHERE date between date '2007-12-01' and date '2008-01-01'
にすると2007-12-31が該当するのですが、
SELECT * FROM test WHERE date between date '2007-12-01' and date '2007-12-31'
では2007-12-31のレコードは該当しないものでしょうか??

select * from test where num between 10 and 100
とした場合では、num が 10 ~ 100 のものが問い合わされますよね??
date型になるとこうならないのでしょうか??

よろしくお願いします。

皆様、新年明けましておめでとうございます。

早速ですが、date型でのbetweenについて教えてください。

SQL文
SELECT * FROM test WHERE date between date '2007-12-01' and date '2007-12-31'

を発行すると、2007-12-31のレコードがあるのに該当しません・・・

試しにSQL文を
SELECT * FROM test WHERE date between date '2007-12-01 00:00:00' and date '2007-12-31 23:59:59'
としても2007-12-31のレコードは検索されません・・・
SQL文を
SELECT * FROM test WHERE date between date...続きを読む

Aベストアンサー

No.1です。
列の属性をtimestampにして実行してみました。

Welcome to psql 8.2.0, the PostgreSQL interactive terminal.
farm=# create table testtbl6 (hoge timestamp);
CREATE TABLE
farm=# insert into testtbl6 values('2007-12-31');
INSERT 0 1
farm=# select * from testtbl6;
hoge
---------------------
2007-12-31 00:00:00
(1 row)

farm=# select * from testtbl6 where hoge between '2007-01-01' and '2007-12-31';
hoge
---------------------
2007-12-31 00:00:00
(1 row)

farm=# select * from testtbl6 where hoge between date '2007-01-01' and date '2007-12-31';
hoge
---------------------
2007-12-31 00:00:00
(1 row)

●時間だけを多少進めたデータを追加してみました

farm=# insert into testtbl6 values('2007-12-31 01:00:00');
INSERT 0 1
farm=# select * from testtbl6;
hoge
---------------------
2007-12-31 00:00:00
2007-12-31 01:00:00
(2 rows)

farm=# select * from testtbl6 where hoge between '2007-01-01' and '2007-12-31';
hoge
---------------------
2007-12-31 00:00:00
(1 row)

farm=# select * from testtbl6 where hoge between date '2007-01-01' and date '200
7-12-31';
hoge
---------------------
2007-12-31 00:00:00
(1 row)

よって、あなたのDBに登録してあるデータは、2007-12-31と午前0時を少し回っているデータが登録されているため、
検索でヒットしないのではないのでしょうか?

No.1です。
列の属性をtimestampにして実行してみました。

Welcome to psql 8.2.0, the PostgreSQL interactive terminal.
farm=# create table testtbl6 (hoge timestamp);
CREATE TABLE
farm=# insert into testtbl6 values('2007-12-31');
INSERT 0 1
farm=# select * from testtbl6;
hoge
---------------------
2007-12-31 00:00:00
(1 row)

farm=# select * from testtbl6 where hoge between '2007-01-01' and '2007-12-31';
hoge
---------------------
2007-12-31 ...続きを読む

QSELECTで1件のみ取得するには?

こんにちわ。
いまORACLE9iを使用している者です。

ACCESSでは
SELECT TOP 1 項目名 FROM テーブル名
ORDER BY 項目名;
で並べ替えたデータ群のうち,先頭の1件だけを
取ることができますが,
ORACLEでそのような機能(SQL)はあるでしょうか?
教えてください。
よろしくお願いします。

Aベストアンサー

order by と rownum を併用する場合は注意が必要です。

[tbl01]
cola | colb
------------
1000 | aaaa
1001 | bbbb

というデータがある場合、
select cola from tbl01 where rownum < 1 order by cola desc;
とすると、「1001」ではなく、「1000」が返されます。
これは、order by の前に rownum < 1 が適用されてしまうからです。

解決するには、
select aaa from (select cola aaa from tbl01 order by cola desc) where rownum = 1;
とすれば良いです。

Qテーブルの最後(最新)のレコードを抽出したい

宜しくお願いします。
PHP MYSQL の組み合わせで使っています

以下のようにして、最後のレコードを取り出したいのですが
まったく違う事をしているのかもしれません。

$sql =" select * from テーブル where フィールド='max' " ;

フィールドはauto_incrementで番号を振っています。
これで最大のつもりなのですが・・・。

他にも、レコードを入れた時間も記録したフィールドがあるのですが
どうしてよいか?判りません。

テーブルの最新のレコードを出したいのです。
**その中の一つのフィールドを取り出すのですが、
  それはうまくいっているみたいです 
  (max の所に数字を入れると表示します)

お手数かけますが、どなたかご教授お願いいたします。

Aベストアンサー

#2回答者です。

MySQL 4.1以前(サブクエリを使えない)なら、以下のような方法が考えられます。

select * from 表名
order by 列名 desc limit 1

Qequalsの逆

javaで、文字列の場合は比較演算子の「==」は用いずに

if ((str1.getText()).equals(str2)){
(※…str1,2は文字列)

と書きますよね?
この逆で、文字列str1とstr2は等しくないとき、にはif以下の条件文をどのように書けばよいでしょうか?

Aベストアンサー

>if !((str1.getText()).equals(str2)){

あくまで
if(){
}


!(str1.getText()).equals(str2)
が入っているので
if !((str1.getText()).equals(str2)){
じゃなくて
if (!(str1.getText()).equals(str2)){
こう。

QTimestamp型への変換について(Java)

ユーザから入力された8桁の数値をTimestamp型に変換する、下記のプログラムを作成したのですが、
例えば、"20111031"を入力して実行した時に、
最終的に出力されるデータは"2011-10-31 23:59:59.0"となります。(ミリ秒部分が"0")

これを、
"2011-10-31 23:59:59.9"(ミリ秒部分が"9"など)のように、
その日の時刻一杯になるような値に変換するには、
プログラムをどのように修正すれば良いでしょうか?



import java.sql.Timestamp;
import java.text.DateFormat;
import java.text.SimpleDateFormat;

public class TimeCheck {

public static void main(String[] args) {

String inputTime = args[0] + "235959";

DateFormat inDateFormat = new SimpleDateFormat("yyyyMMddHHmmss");
DateFormat outDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");

try {

String oldTime = outDateFormat.format(inDateFormat.parse(inputTime));

// Timestamp型に変換
Timestamp newTime = Timestamp.valueOf(oldTime);

System.out.print(newTime);

} catch (Exception e) {

e.printStackTrace();

}
}
}

ユーザから入力された8桁の数値をTimestamp型に変換する、下記のプログラムを作成したのですが、
例えば、"20111031"を入力して実行した時に、
最終的に出力されるデータは"2011-10-31 23:59:59.0"となります。(ミリ秒部分が"0")

これを、
"2011-10-31 23:59:59.9"(ミリ秒部分が"9"など)のように、
その日の時刻一杯になるような値に変換するには、
プログラムをどのように修正すれば良いでしょうか?



import java.sql.Timestamp;
import java.text.DateFormat;
import java.text.SimpleDateFormat;

public c...続きを読む

Aベストアンサー

結果が正しく表示されるかもしれないけど。
40点くらいかなぁ。

protected static Timestamp toTimestamp(String ymd) throws ParseException {

 String old = ymd + "235959999";
 Date d = new SimpleDateFormat("yyyyMMddHHmmssSSS").parse(old);
 return new Timestamp(d.getTime());
}

Date#getTime() // return by millisecconds
を利用すれば

String -> Date -> String -> Timestamp が
String -> Date -> Timestamp となる。

さらに Date 化を減らす。

 String ymd2 = ymd.replaceAll("([\\d]{4})([\\d]{2})([\\d]{2})", "$1-$2-$3");
 String old = ymd2 + " 23:59:59.999";
 return Timestamp.valueOf(old);

となる。

結果が正しく表示されるかもしれないけど。
40点くらいかなぁ。

protected static Timestamp toTimestamp(String ymd) throws ParseException {

 String old = ymd + "235959999";
 Date d = new SimpleDateFormat("yyyyMMddHHmmssSSS").parse(old);
 return new Timestamp(d.getTime());
}

Date#getTime() // return by millisecconds
を利用すれば

String -> Date -> String -> Timestamp が
String -> Date -> Timestamp となる。

さらに Date 化を減らす。

 String ymd2 = ymd.replaceAll("([\\...続きを読む

QPOSTGRESのデータの格納場所はどこでしょうか?

RedHat7.2/PostgreSQL7.2/という環境で、サーバーがクラッシュしてしまい、データを他のサーバに移し変えないといけなくなりました。そこで、PostgreSQLを再インストールしないとデータベースが使えない状況となりました。

データベースを再インストールするのは良いとして、どこかに格納されているはずのデータベースの内容を取り出し、復帰させたいのですが、方法はありますか?大変困っております。よろしくお願いします。

Aベストアンサー

No.1の追加です。
データの移設でよかったと思います。
または、データを読み込むときに、「iオプション」でディレクトリを指定して、元のファイルを読み込んでもよかったと思います。

Qsqlに記述できない文字

いつもお世話になっております。
WEB画面から入力された項目を対象にPostgresに検索しに行っているのですが、シングルクォート(')が入っていた場合、エラーになってしまいました。

JavaからSQLを生成し、Postgresに接続しているのですが、シングルクォートを検索させるにはどうするのが良いでしょうか。

またSQLに記述できない文字は、シングルクォートのほかに何かありますでしょうか。

よろしくお願いします。

Aベストアンサー

下記のページにPostgreSQLのSQLの文字列定数についての説明が有りますので、記述できない文字などについてはここを見ると良いでしょう。
http://www.postgresql.jp/document/pg837doc/html/sql-syntax-lexical.html#SQL-SYNTAX-STRINGS

さて、シングルクウォートを含む文字列定数への対応としては下記の3つが考えられます。
1. 文字列中のシングルクウォートとバックスラッシュ(\)を\でエスケープする。
2. ドル引用符を使用する。
3. プレースフォルダを使用する。


2は、$xxxx$ のようなドル記号で囲まれた文字列を引用符代わりに使う、PostgreSQL 独自の機能です。
'hoge' と書く代わりに $xxxx$hoge$xxxx$ の様に書けます。
詳しくは下記のページを見て下さい。
http://www.postgresql.jp/document/pg837doc/html/sql-syntax-lexical.html#SQL-SYNTAX-DOLLAR-QUOTING

3は、SQLの定数の位置に?を書き、PreparedStatement の set~~() メソッドを使って値を指定する方法です。下記のページが参考になるでしょう。
http://www.atmarkit.co.jp/fjava/rensai2/webopt11/webopt11.html
http://sdc.sun.co.jp/java/docs/j2se/1.4/ja/docs/ja/guide/jdbc/getstart/preparedstatement.html

参考URL:http://www.postgresql.jp/document/pg837doc/html/sql-syntax-lexical.html#SQL-SYNTAX-CONSTANTS

下記のページにPostgreSQLのSQLの文字列定数についての説明が有りますので、記述できない文字などについてはここを見ると良いでしょう。
http://www.postgresql.jp/document/pg837doc/html/sql-syntax-lexical.html#SQL-SYNTAX-STRINGS

さて、シングルクウォートを含む文字列定数への対応としては下記の3つが考えられます。
1. 文字列中のシングルクウォートとバックスラッシュ(\)を\でエスケープする。
2. ドル引用符を使用する。
3. プレースフォルダを使用する。


2は、$xxxx$ のようなドル記号で囲...続きを読む


このQ&Aを見た人がよく見るQ&A

人気Q&Aランキング