• 締切済み

時刻型にNULLでセットしたい

アクセスのデータベースのフィールドを日付/時刻型にしております。aspでINSERTを使用しています。テキスト型でしたら、NULLの許可がありますが、日付/時刻型にはそのような項目がありません。時刻型にNULLでセットしたいのですが、その方法がわかりません。いろいろ調べましたが…。ご伝授の程、よろしくお願い致します。 例. フィールドaにhtmlから引きわたったTimesをセットする。 ※Timesには空白("")がRequestされています。  テーブル名db_1 書き込み(##を使用していません) insert INTO db_1(a)VALUES ('"& Request("Times") &"')" 更新 update db_1 set a=#"& Request ("times") & "# where id = "&Request ("id")&"")

みんなの回答

  • BLUEPIXY
  • ベストアンサー率50% (3003/5914)
回答No.3

#2について、 ちょっと、そちらでどういう風にやられているのかはよくわからないのですが、 多分、SQLコマンドを文字列のような形で保持して 発行されてるんだと思うのですが、 そうだとすると、単に、文字列(SQLコマンド)を動的に作ればいいですよね。 つまり、 "INSERT INTO db_1 VALUES ( field1,field2 ,field3 ,field4 );" のfieldの各部分を必要なら ~" & IIF(Request("Times")="","NULL","'" & Request("Times") & "'") & "~ に置き換えればいいと思うのですが IIFがVBScriptにないとしても、言いたいことは同じです。(変数にして置き換えすればいいですよね)

  • BLUEPIXY
  • ベストアンサー率50% (3003/5914)
回答No.2

#1の補足について IFを使うしかないと思いますが、 IF Request("Times")="" then insert INTO db_1(a)VALUES (NULL) ELSE insert INTO db_1(a)VALUES ('"& Request("Times") &"')" END IF みたいな感じでうまくいきませんか?

RashMan
質問者

補足

ありがとうございます。 Time(時刻型)の項目が5つあります。そのすべての判定を行うにはIFで判定させると、すこし苦労します。 Timeの項目がNULLの場合は、NULLをVALUES ('"& Request("Times") &"')にセットしたいのですが‥ すみませんがよろしければ、ご指導の程、宜しくお願い致します。

  • BLUEPIXY
  • ベストアンサー率50% (3003/5914)
回答No.1

NULLをINSERTでセットする場合は 単に VALUES(NULL) だと思います。 なので、Timesが空白の時NULLをセットするようなものと振り分けたらいいと思います。 勘違いしてたらすみません。

RashMan
質問者

補足

早速の回答ありがとうございます。 >Timesが空白の時NULLをセットするようなものと振り分けたらいいと思います。 詳しく教えていただけないでしょうか。 普通時(2004/10/15など)と空白時(NULL)を区別させるにはどのようにすればよろしいでしょうか。 空白時にはVALU(#'& times &'#)をVALUE(NULL)にするには、IF文を使うしかありませんのでしょうか。 ご指導の程、よろしくお願いいたします。

関連するQ&A

  • int型フィールドにnullを登録できない・・・

    > insert into tbl_tst values (001,'',21000,,22,4400,'3~4日','∞') とすると syntax error になってしまいます。 > insert into tbl_tst values (001,'',21000,'',22,4400,'3~4日','∞') とすると out of range になってしまいます。 > insert into tbl_tst values (001,'',21000,0,22,4400,'3~4日','∞') は通常に登録できます。 > insert into tbl_tst values (001,'',21000,'0',22,4400,'3~4日','∞') も通常に登録できます。 4カラム目のフィールドなのですが、show fields で見ても int(11) Null→YES  Default→NULLとなっております。 NULLを登録(何も値を入れない)したいのですが、 どうすればよいでしょうか。 ご存知の方いらっしゃいましたらご教示願います。 宜しくお願い致します。

    • ベストアンサー
    • MySQL
  • insert時に日付のフィールドにnullを入れたい

    テーブルに以下のフィールドがあります。 [No],[区分],[キーNo],[日付] このテーブルに日付のデータのない、以下のようなデータをインサートしたいのですが、 [No],[区分],[キーNo] 1 ,kbn1 , key1 strSQL1 = "INSERT INTO テーブル1" & " ([No],[区分],[キーNo],[日付])" _ & " VALUES ("1","kbn1","key1",NULL )" とするとエラーが出てしまいます。日付フィールドに何も入れないようにinsert文を書くにはどうしたらよいでしょうか。 すみません、アドバイス等宜しくお願いします。

  • Int型のフィールドへのNULLを入れる

    テーブル t_sample のINT型のフィールド(win_rate)にNULLを入れたいと思っています。 フィールドのNULLを許可に設定し、PHPMyAdminから直接データを挿入の際に、値を入力しない場合は素直にNULLが入ってくれます。 しかし、ウェブ上でinsertを使用して $win_rate = null; (勝率計算なので、試合をしていない場合はNULLにしたい) mysql_query("insert into t_sample ( namae , win_rate ) values ( '名前' , '".$win_rate."')"); などとした場合にNULLが入ってくれず、「0」が入ってしまいます。 win_rate(勝率)のようなフィールドなので、0とNULLを区別して扱いたいのですが、 どうすればいいでしょうか?

    • ベストアンサー
    • PHP
  • sqliteについて質問があります。

    sqliteについて質問があります。 db browser for sqlite でテーブルを作成したのですが、これをhtmlやphpなどを使いweb上で利用したいです。 例えば、ユーザーが”男”を選択したら”男”のデータ一覧が表示されるようにしたいのですがどうプログラムすればいいですか? 作れたファイルはtest.dbです。 (test.dbは開けませんでしたので以下、test.dbのhumanテーブルです。) BEGIN TRANSACTION; CREATE TABLE IF NOT EXISTS "human" ( "id" INTEGER NOT NULL, "name" TEXT NOT NULL, "sex" TEXT NOT NULL, "age" INTEGER NOT NULL, "prefecture" TEXT, "country" TEXT NOT NULL, PRIMARY KEY("id") ); INSERT INTO "human" VALUES (1,'中村静香','男',48,'千葉','japan'); INSERT INTO "human" VALUES (2,'中村ゆり','女',45,'埼玉','japan'); INSERT INTO "human" VALUES (3,'本田翼','女',22,'','japan'); INSERT INTO "human" VALUES (4,'本田望結','男',16,'東京','japan'); INSERT INTO "human" VALUES (5,'綾瀬はるか','女',34,'東京','japan'); INSERT INTO "human" VALUES (6,'中村アン','男',38,'','usa'); INSERT INTO "human" VALUES (7,'広瀬アリス','女',26,'東京','japan'); INSERT INTO "human" VALUES (8,'有村架純','男',31,NULL,'usa'); INSERT INTO "human" VALUES (9,'長澤まさみ','女',29,NULL,'uk'); INSERT INTO "human" VALUES (10,'有村藍里','男',18,'埼玉','japan'); COMMIT;

    • ベストアンサー
    • PHP
  • SQLiteをhtmlでの表示

    sqliteで <?php // 変数の初期化 $db = null; $sql = null; $res = null; $row = null; $db = new SQLite3("test.db"); // データの取得 $sql = 'SELECT * FROM human where sex="男"'; $res = $db->query($sql); ?> <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>SQLite テスト</title> </head> <body> <?php while( $row = $res->fetchArray() ) { echo '<p>' . $row[0] . '</p>'; } ?> </body> </html> こちらのphpを実行したのですがidだけが表示されてしまいます。 idに対応するテーブルの行はあっています。 対応するname,age等の表示もさせたいのですがどうすればいいですか? いかtest.dbのhumanテーブルです。 BEGIN TRANSACTION; CREATE TABLE IF NOT EXISTS "human" ( "id" INTEGER NOT NULL, "name" TEXT NOT NULL, "sex" TEXT NOT NULL, "age" INTEGER NOT NULL, "prefecture" TEXT, "country" TEXT NOT NULL, PRIMARY KEY("id") ); INSERT INTO "human" VALUES (1,'中村静香','男',48,'千葉','japan'); INSERT INTO "human" VALUES (2,'中村ゆり','女',45,'埼玉','japan'); INSERT INTO "human" VALUES (3,'本田翼','女',22,'','japan'); INSERT INTO "human" VALUES (4,'本田望結','男',16,'東京','japan'); INSERT INTO "human" VALUES (5,'綾瀬はるか','女',34,'東京','japan'); INSERT INTO "human" VALUES (6,'中村アン','男',38,'','usa'); INSERT INTO "human" VALUES (7,'広瀬アリス','女',26,'東京','japan'); INSERT INTO "human" VALUES (8,'有村架純','男',31,NULL,'usa'); INSERT INTO "human" VALUES (9,'長澤まさみ','女',29,NULL,'uk'); INSERT INTO "human" VALUES (10,'有村藍里','男',18,'埼玉','japan'); COMMIT;

    • ベストアンサー
    • PHP
  • Date型にNULLをセットしたい VB2008+SQLServer2008

    よろしくお願いいたします。 VB2008Express+SQLServer2008Expressを勉強しております。 Date型にNULLをセットする方法についてお聞きします。 定義ではDate型で「NULLを許容」にしております。 http://oshiete1.goo.ne.jp/qa1047427.html?ans_count_asc=20 この質問を参考に、 INSERT INTO tbl_Main(dteDate) VALUES (DBNull.Value) このようにしてみましたが、 「不適切な構文があります」というエラーが起きます。 空文字「"''"」にすると「1900/01/01」がセットされてしまったり、 「vbTab」に変えてみたりとやってみましたが、うまく行きません。 お時間がありましたら、アドバイスよろしくお願いいたします。

  • 階層構造のテーブルの行の取得について

    このジャンルでお願いします。 次のようなテーブルで CREATE TABLE IF NOT EXISTS user ( id int(11) NOT NULL AUTO_INCREMENT, name varchar(32) NOT NULL, PRIMARY KEY(id) ) ENGINE=InnoDB DEFAULT CHARSET=utf8; INSERT INTO user (name) VALUES ('user1'); INSERT INTO user (name) VALUES ('user2'); INSERT INTO user (name) VALUES ('user3'); CREATE TABLE IF NOT EXISTS item ( id int(11) NOT NULL AUTO_INCREMENT, parent_id INT, name varchar(32) NOT NULL, FOREIGN KEY (parent_id) REFERENCES item(id) ON DELETE CASCADE ON UPDATE CASCADE, PRIMARY KEY(id) ) ENGINE=InnoDB DEFAULT CHARSET=utf8; INSERT INTO item (parent_id, name) VALUES (null, 'item1'); INSERT INTO item (parent_id, name) VALUES (1, 'item2'); INSERT INTO item (parent_id, name) VALUES (2, 'item3'); INSERT INTO item (parent_id, name) VALUES (3, 'item4'); INSERT INTO item (parent_id, name) VALUES (2, 'item5'); INSERT INTO item (parent_id, name) VALUES (null, 'item6'); INSERT INTO item (parent_id, name) VALUES (6, 'item7'); INSERT INTO item (parent_id, name) VALUES (null, 'item8'); CREATE TABLE IF NOT EXISTS user_item ( id int(11) NOT NULL AUTO_INCREMENT, user_id INT, item_id INT, type varchar(16) NOT NULL, PRIMARY KEY(id), FOREIGN KEY (user_id) REFERENCES user(id) ON DELETE CASCADE ON UPDATE CASCADE, FOREIGN KEY (item_id) REFERENCES item(id) ON DELETE CASCADE ON UPDATE CASCADE ) ENGINE=InnoDB DEFAULT CHARSET=utf8; INSERT INTO user_item (user_id, item_id, type) VALUES (1, 1, 'allow'); INSERT INTO user_item (user_id, item_id, type) VALUES (1, 3, 'deny'); INSERT INTO user_item (user_id, item_id, type) VALUES (1, 7, 'allow'); user_itemのuser_idが1のitemの行を取得したいのですが、 その条件として ・user_itemテーブルのtypeが'allow'のitem_id以下のitemの行 ・ただしtypeが'deny'のitem_id以下の行は除く この例だと、user_itemの INSERT INTO user_item (user_id, item_id, type) VALUES (1, 1, 'allow'); の行によってitemテーブルの INSERT INTO item (parent_id, name) VALUES (null, 'item1'); INSERT INTO item (parent_id, name) VALUES (1, 'item2'); INSERT INTO item (parent_id, name) VALUES (2, 'item3'); INSERT INTO item (parent_id, name) VALUES (3, 'item4'); INSERT INTO item (parent_id, name) VALUES (2, 'item5'); が取得候補になりますが、 INSERT INTO user_item (user_id, item_id, type) VALUES (1, 3, 'deny'); によって INSERT INTO item (parent_id, name) VALUES (2, 'item3'); INSERT INTO item (parent_id, name) VALUES (3, 'item4'); の行は除かれ、 INSERT INTO item (parent_id, name) VALUES (null, 'item1'); INSERT INTO item (parent_id, name) VALUES (1, 'item2'); INSERT INTO item (parent_id, name) VALUES (2, 'item5'); の行が取得されます。 つまりitemテーブルにおいて上の階層の直近の(user_itemと結合して取得した)typeが 'allow'である場合のみ取得したいのです。 INSERT INTO item (parent_id, name) VALUES (null, 'item1');←取得 INSERT INTO item (parent_id, name) VALUES (1, 'item2');←取得 INSERT INTO item (parent_id, name) VALUES (2, 'item3'); INSERT INTO item (parent_id, name) VALUES (3, 'item4'); INSERT INTO item (parent_id, name) VALUES (2, 'item5');←取得 INSERT INTO item (parent_id, name) VALUES (null, 'item6'); INSERT INTO item (parent_id, name) VALUES (6, 'item7');←取得 INSERT INTO item (parent_id, name) VALUES (null, 'item8'); 複雑ではありますが、これはどのようなSQL文にすれば良いのでしょうか?

    • ベストアンサー
    • MySQL
  • 2つのカラムの日付の範囲

    CREATE TABLE IF NOT EXISTS `events` ( `id` int(10) unsigned NOT NULL AUTO_INCREMENT, `start_on` date NOT NULL, `end_on` date DEFAULT NULL, PRIMARY KEY (`id`) ) ; INSERT INTO `events` ( `id` ,`start_on` ,`end_on` ) VALUES ( NULL, '2011-02-10', '2011-12-28' ); INSERT INTO `events` ( `id` ,`start_on` ,`end_on` ) VALUES ( NULL, '2011-03-01', NULL ); INSERT INTO `events` ( `id` ,`start_on` ,`end_on` ) VALUES ( NULL, '2011-04-01', NULL ); INSERT INTO `events` ( `id` ,`start_on` ,`end_on` ) VALUES ( NULL, '2011-04-10', '2011-05-10' ); INSERT INTO `events` ( `id` ,`start_on` ,`end_on` ) VALUES ( NULL, '2011-01-10', '2011-02-15' ); '2011-03' を渡したら2件帰ってくるような SQL 文を書きたいです。 (3月にやってるイベントの一覧を取得したい。) WHERE `start_on` BETWEEN '2011-03-01' AND '2011-03-31' だと1行目が取得できませんでした。 すみません。よろしくお願いします。

  • 閉包テーブルのノードの移行について

    このジャンルでお願いします。 次のようなテーブルで CREATE TABLE IF NOT EXISTS item ( id int(11) NOT NULL AUTO_INCREMENT, name varchar(32) NOT NULL, PRIMARY KEY(id) ) ENGINE=InnoDB DEFAULT CHARSET=utf8; INSERT INTO item (name) VALUES ('item1'); INSERT INTO item (name) VALUES ('item2'); INSERT INTO item (name) VALUES ('item3'); INSERT INTO item (name) VALUES ('item4'); INSERT INTO item (name) VALUES ('item5'); INSERT INTO item (name) VALUES ('item6'); CREATE TABLE IF NOT EXISTS treepath ( ancestor_id int(11) NOT NULL, descendant_id int(11) NOT NULL, FOREIGN KEY (ancestor_id) REFERENCES item(id) ON DELETE CASCADE ON UPDATE CASCADE, FOREIGN KEY (descendant_id) REFERENCES item(id) ON DELETE CASCADE ON UPDATE CASCADE, PRIMARY KEY(ancestor_id, descendant_id) ) ENGINE=InnoDB DEFAULT CHARSET=utf8; INSERT INTO treepath (ancestor_id, descendant_id) VALUES (1, 1); INSERT INTO treepath (ancestor_id, descendant_id) VALUES (1, 2); INSERT INTO treepath (ancestor_id, descendant_id) VALUES (1, 3); INSERT INTO treepath (ancestor_id, descendant_id) VALUES (1, 4); INSERT INTO treepath (ancestor_id, descendant_id) VALUES (1, 5); INSERT INTO treepath (ancestor_id, descendant_id) VALUES (1, 6); INSERT INTO treepath (ancestor_id, descendant_id) VALUES (2, 2); INSERT INTO treepath (ancestor_id, descendant_id) VALUES (2, 4); INSERT INTO treepath (ancestor_id, descendant_id) VALUES (2, 5); INSERT INTO treepath (ancestor_id, descendant_id) VALUES (2, 6); INSERT INTO treepath (ancestor_id, descendant_id) VALUES (3, 3); INSERT INTO treepath (ancestor_id, descendant_id) VALUES (4, 4); INSERT INTO treepath (ancestor_id, descendant_id) VALUES (4, 6); INSERT INTO treepath (ancestor_id, descendant_id) VALUES (5, 5); INSERT INTO treepath (ancestor_id, descendant_id) VALUES (6, 6); item1┬item2    │ ├item4    │ │  └item6    │ └item5    │    └item3 を item1┬item2    │ │      │ └item5    │    └item3      └item4        └item6 のようにitem4以下のノードをitem3の下に移したいのですが、 その場合のtreepathテーブルの更新はどのようなSQL文にすれば良いのでしょうか?

    • ベストアンサー
    • MySQL
  • フィールドをデフォルト0にする

    フィールドをデフォルト0にする方法が知りたいです。 以下のようなサンプルがります。 drop table test_a; create table test_a ( name varchar2(10), a number(1), b number(1), c number(1) ) insert into test_a (name) values ('AAA'); insert into test_a (name,a) values ('BBB', NULL); insert into test_a (name,a,b) values ('CCC', NULL,NULL); select * from test_a; この状態では、a,b,cはNULLですが、a,b,cの値をデフォルト値で0にしたい為、 update test_a set a = 0, b = 0, c = 0; として、データを直して、次回から insert into test_a (name) values ('DDD'); とすると、nameがDDDの時もa,b,cが0となるようにテーブル定義を変えたいのですが 既存のテーブルをそのままで、途中から変更する方法が知りたいです。

専門家に質問してみよう