• ベストアンサー

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

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

  • ssugi
  • お礼率100% (3/3)

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

  • ベストアンサー
  • selenity
  • ベストアンサー率41% (324/772)
回答No.3

あとは、プログラムの書き方次第ですね、、、 If hensu=Null Or hensu="" Then dt = "NULL" Else dt = "'" & hensu & "'" End IF E_SQL = "INSERT INTO TABLE1 VALUES & _ "( 1,'あいう', " & dt& ")" の様に書きます。

ssugi
質問者

お礼

ありがとうございました。 お手をわずらわせてすみません。 参考にさせていただきます。

その他の回答 (2)

  • Hk2001
  • ベストアンサー率48% (24/49)
回答No.2

日付型に 空白(ブランク)はダメです。 NullならOkですが。ということでNullにするということで回答します。 空白 =>'' じゃなくて Null =>Null にしてみたら? ASPは、Accessでしかやったことないですけど VBでSqlServerやったときは、たしかに  INSERT INTO TABLE1 VALUES ( 1, 'あいう', '') で 1900/1/1 になりました。 なんで INSERT INTO TABLE1 VALUES ( 1, 'あいう', Null) でどうですか? 注意点は 空白('')だったら Nullに置き換えが必要になります。

ssugi
質問者

お礼

ありがとうございます。置き換えを考えてみます。

  • selenity
  • ベストアンサー率41% (324/772)
回答No.1

空白を入れることは不可能です。 時刻型(datetime型)のフィールドへ、空白(' ') という文字を代入することはできません。 代入しようとしても無視されます。 内部で空値に変換されているようです。 あなたがいれたいのは空値またはヌルでしょう。 空白と空値は異なるものです。 また、空値とヌルも異なります。 Datetime型へ空値を入れた場合 「1900/1/1 00:00:00.000」が代入されます。 これを避けるには VALUES ( 1, 'あいう', '') ではなく VALUES ( 1, 'あいう', NULL) と入力しましょう。

ssugi
質問者

お礼

ありがとうございます。出来ました。 ずうずしく、もう少しお聞きしたいのですが、 hensu = Null E_SQL = "INSERT INTO TABLE1 VALUES ( 1,'あいう', '" & hensu & "')" という感じだとやっぱり「''」になってしまうので、変数でもちたいときはNullの情報が入ったときは文書を変えなければならないのでしょうか?それとも、書き方に問題があるのでしょうか? ご回答いただけたら幸いです。

関連するQ&A

  • SQLサーバに日付と時間を入れる

    ASP(VBScript)でSQLサーバに日付と時間を以下のように記述して実行しても うまくいきません。正しい記述方法をお分かりの方教えて ください。 SQL="INSERT INTO master(日付) VALUES('" & "#" & Now & "#')"

  • insert時に日付のフィールドにnullを入れたい

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

  • Accessへ日付をINSERT

    今Access2000のテーブルから文字として受け取ったデータを 同じくAccessの別テーブルの日付型にINSERTしようとしています。 ソフトはVC6.0を使用しています。 受け取るSELECTはうまくできています。 UCHAR sqlstr [ ] ="INSERT INTO テーブル名"           "(カラム1、カラム2、カラム3)"           "VALUES(?,?,?)"; INSERTはこのようにSQL文を用意しておいてSQLExecuteで SQL文を実行しようとしています。 この場合にカラム1が日付型だとしたら、 「?」のパラメータには文字として渡し、 SQL文のなかで "VALUES(to_date(?,'YYYYMMDD'),?,?)"; とすればうまくいくと思ったのですができません。 いろいろサイトを見るとAccessでは「’」ではなく「#」を使うと 書いてあったので to_date(?,#YYYYMMDD#) とやったのですがエラーになってしまいます。 ちなみにパラメータとして渡す文字列は「20020413」という 8桁の普通の文字です。 どなたか知っている方いませんでしょうか? 他に方法があればそれでも構いません。 どうか教えてください。m(__)m どうしても先へ進めません…。

  • 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行目が取得できませんでした。 すみません。よろしくお願いします。

  • 日付を入力するには?

    PHP+SQLサーバ2003でWEB作成をしています。 PHPでPOSTされた年月日をSQLサーバのカラム(smalldate型)に格納したいのですが、入力された通りにはDBに日付が格納されないのです。 例)2007/10/10 → (DB)1905/06/14 ソースはこんな感じです。 //年、月、日と入力された値を"年/月/日" の形にする $day = implode("/",array($_POST["year"],$_POST["month"],$_POST["day"])); //入力された日付をDBに格納する。 $sql = "insert into table_name(date) values($day)"; 根本的に何かが間違っていると思われるのですが、よくわかりません。 どなたかアドバイスお願いします。

  • [ADO.NET]Accessの日付型にデータをInsertするには?

    言語はVB.NETでDBはAccess2003、OleDbで接続をしています。 テーブルに日付型のフィールドがあるのですが、 SQL文でInsertしようとすると、 System.Data.OleDb.OleDbException: 更新可能なクエリであることが必要です。 という例外がスローされます。 SQL文としては、 INSERT INTO TEST_TABLE (name,updatetime) VALUES ('テスト',DateValue('2006/12/11 18:00:00')); というような構文になっています。 初歩的な不明点ですが、ご教授お願いします。

  • JSPからYYYYMMDDで日付入力する

    こんにちは。 JSPからサーブレット・Beanを使うプログラムを作っております。 調べてみたのですがわからなくなってきてしまいました。 ぜひご教授ください。 JSPから日付を入力し、DBに日付データを挿入します。 今はBeanから下のようなSQL文で、JSP画面からはフォームに「2008-08-20」と入力して値を挿入しています。 sql = insert into テーブル名 values('?') できればこのフォームに「20080820」と入力させたいと思っています。 そのためにはBeanでSQL文を発行する際に日付を分けて、「2008」+「-」+「08」+「-」+「20」のように間に「-(ハイフン)」を入れてやればいいのはわかるのですが、そのためにはどのようにすればよいか教えてください。 「20080820」を分けて、sql1・sql2・…に入れ、それを実際のSQL文発行の際にsql1+"-"+sql2+…とやるのでしょうか? よろしくお願いいたします。

    • ベストアンサー
    • Java
  • 日付型項目の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;

  • フィールドをデフォルト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となるようにテーブル定義を変えたいのですが 既存のテーブルをそのままで、途中から変更する方法が知りたいです。

  • 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