はじめての親子ハイキングに挑戦!! >>

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

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

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

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

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

A 回答 (3件)

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




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

E_SQL = "INSERT INTO TABLE1 VALUES & _
"( 1,'あいう', " & dt& ")"
の様に書きます。
    • good
    • 3
この回答へのお礼

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

お礼日時:2001/06/27 20:42

日付型に 空白(ブランク)はダメです。


NullならOkですが。ということでNullにするということで回答します。

空白 =>'' じゃなくて
Null =>Null にしてみたら?

ASPは、Accessでしかやったことないですけど


VBでSqlServerやったときは、たしかに 
INSERT INTO TABLE1 VALUES ( 1, 'あいう', '')
で 1900/1/1 になりました。
なんで

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

でどうですか?

注意点は 空白('')だったら Nullに置き換えが必要になります。
    • good
    • 0
この回答へのお礼

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

お礼日時:2001/06/27 18:28

空白を入れることは不可能です。


時刻型(datetime型)のフィールドへ、空白(' ')
という文字を代入することはできません。
代入しようとしても無視されます。
内部で空値に変換されているようです。

あなたがいれたいのは空値またはヌルでしょう。
空白と空値は異なるものです。
また、空値とヌルも異なります。

Datetime型へ空値を入れた場合
「1900/1/1 00:00:00.000」が代入されます。

これを避けるには
VALUES ( 1, 'あいう', '')
ではなく
VALUES ( 1, 'あいう', NULL)
と入力しましょう。
    • good
    • 1
この回答へのお礼

ありがとうございます。出来ました。
ずうずしく、もう少しお聞きしたいのですが、

hensu = Null

E_SQL = "INSERT INTO TABLE1 VALUES ( 1,'あいう', '" & hensu & "')"

という感じだとやっぱり「''」になってしまうので、変数でもちたいときはNullの情報が入ったときは文書を変えなければならないのでしょうか?それとも、書き方に問題があるのでしょうか?
ご回答いただけたら幸いです。

お礼日時:2001/06/27 18:18

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

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

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

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

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

Qdatetime型でNULL値を入れたい。

現在SQLserver上で、、CSVを一時テーブルに保管し、ある条件に合致する行のみTBLに追加するというストアドを書いています。そのTBLには「datetime型」の列があります。
この作業で、2点問題が発生しています。
(1)CSVファイルから一時テーブルにデータを入れようとすると、datetime列がNULLの場合、型の不一致でエラーが発生します。
(2)上記において、一時テーブルの型をとりあえずvarcharにしておくと入れれるのですが、TBLに追加しようとする際、「convert(datetime,変数)」としているのですが、上手くキャストしてくれません。(「文字列から日付への変換に失敗しました」のような文がでます)

どのようにすれば、NULLでもdatetimeに入れられるのでしょうか?教えてください。

Aベストアンサー

## Nullじゃなくて''(空文字)が登録されているような気がしますが。。。
## select case when 変数 is null then 'NULL' when 変数 = '' then '空' else 'OK' end
## from CSVファイル
## でNullと出ずに、空とでたらそうです。
## 調べてみないと分らないので、それはさておき、

とりあえず、
convert(datetime,変数)
のほうは、
case
when 変数 is null then null
when 変数 = '' then null
else convert(datetime,変数)
end
としたらうまくいくのではないかと思います。
datetime型の変数がNot Null指定でテーブルを作っているとダメですが。

QDate型に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」に変えてみたりとやってみましたが、うまく行きません。

お時間がありましたら、アドバイスよろしくお願いいたします。

Aベストアンサー

混乱があるかな、と思うのは、
「DBNull.Value」はVB内で解釈されるもので、「INSERT INTO ...」という構文はSQL Serverで解釈されるものです。

したがって、SQL Serverが「INSERT INTO tbl_Main(dteDate) VALUES (DBNull.Value)」というSQLを受け取っても、
「DBNull.Value」が何なのかSQL Serverには判断できないです。

「INSERT INTO tbl_Main(dteDate) VALUES (NULL)」でいいでしょう。

QDATE型変数を初期化する方法

他の変数みたいに
ゼロや""では初期化は出来ないのでしょうか?

Aベストアンサー

初期化とはプログラムループに入る前にある値にプログラムコーディングで設定することですよね。
下記によると、「出来る」といえるのではないですか。
それとも例えば、INISIALIZE関数やメソッドがあるか
と言う質問ですか。
VB(VBAですか。そこをはっきり書かないと。)で
下記サンプルプログラムをやって見ました。
Private Sub Form_Click()
Dim d As Date
d = "0"
Form1.Print "ここを通りました"
Form1.Print d
Form1.Print Format(d, "yy/mm/dd")
MsgBox Year(d)
MsgBox Month(d)
MsgBox Day(d)
End Sub
Form1には00:00:00、89/12/30が表示され、MSGBOXでは1899、12,30(31で無い)と表示されました。
こう言うことはエクセルの日付に似ており、シリアル値
のスタート日を表示しているところから、その値でセットされているはず。したがってd+1とか整数的演算が可能と
言うことであり、表示する時だけyyyy/mm/ddほか書式に
したがってVBが表示してくれると思う。
ただこの利用法は思いつかないが。
""に付いてはやっていませんが。

初期化とはプログラムループに入る前にある値にプログラムコーディングで設定することですよね。
下記によると、「出来る」といえるのではないですか。
それとも例えば、INISIALIZE関数やメソッドがあるか
と言う質問ですか。
VB(VBAですか。そこをはっきり書かないと。)で
下記サンプルプログラムをやって見ました。
Private Sub Form_Click()
Dim d As Date
d = "0"
Form1.Print "ここを通りました"
Form1.Print d
Form1.Print Format(d, "yy/mm/dd")
MsgBox Year(d)
MsgBox Month(d)
MsgBox Da...続きを読む

QMAX値を条件にデータを取得するには?

SQL文で困っています。
ご教授下さい。


下記のようなデータがあった場合、それぞれの区分毎に
年月が最大(最新)のデータを取得したいです。
(実際には1レコードにその他項目があり、それらも取得します。)
<検索対象データ>
区分 年月   金額
-----------------------------
A   200412  600
A   200503  560
B   200311  600
B   200508  1000
B   200504  560
C   200508  400
C   200301  1100


<取得したいデータ>

区分 年月   金額
-----------------------------
A   200503  560
B   200508  1000
C   200508  400

よろしくお願いします。

Aベストアンサー

テーブル名をXXXとすると次のようなSQLでよいと思います。(最善の方法かどうかは自信がないですが)

select B.* from (select 区分, max(年月) as 年月 from XXX group by 区分) As A
inner join XXX as B on A.区分 = B.区分 and A.年月 = B.年月
order by B.区分

QAccessのRefresh・Requery・Repaintの違い

Requeryはもう一度ソースレコード(テーブル)を読み込むようです。このとき、テーブルの先頭レコードに移動してしまいます。
Refreshは最新のレコード(テーブル)を再表示するような気がします。レコードの移動は起こらない気がします。
Repaintは、VBAでキャプションなどを変更したとき使っています。
でも、よくわかっていません。
どんなときにどんなメソッドを使えばいいのでしょうか?
詳しい方、よろしくお願いいたします。

Aベストアンサー

たびたびすみません。
調べてたらこんなのがでてきました。
http://www.nurs.or.jp/~ppoy/access/access/acF007.html

参考URL:http://www.nurs.or.jp/~ppoy/access/access/acF007.html

Q日付型カラムへのデータINSERT

お世話になります。ひとつご教授ください。

オラクル10g, ojdbc14でjdk1.4.2から接続です。

INSERT命令を使ってテーブルにレコードを追加する際に、DATE型のカラムに対して

INSERT TABLE_A (DATE1, ...) VALUES ('2006-4-27 12:00:00', ...);

を実行するとエラーORA-01861が出ます。そこで

INSERT TABLE_A (DATE1, ...) VALUES ('2006-4-27', ...);

このように記述して再度実行すると通ります。

このようなとき、時間の部分まで設定した値をカラムに格納したいときはどうしたらよろしいでしょうか?

よろしくお願いします。

Aベストアンサー

ごめんなさい。
説明と文例が違ってしまいました。
正しくはこちらです。

INSERT TABLE_A (DATE1, ...) VALUES (to_date('2006-4-27 12:00:00','yyyy/mm/dd hh24:mi:ss'), ...);
というように、to_date関数を使うのが一般的かと思います。

QVBAのAccessでDATE型のINSERT

テーブルに今日の日付でインサートしたいのですが、なぜか、まったく違う日付になってしまいます。
わかる方教えてください。
よろしくお願いします。

INSSQL = "INSERT INTO aaa(test)" _
& " Values(" & Format   (Date, "yyyy/mm/dd") & ");"

Aベストアンサー

INSSQL = "INSERT INTO aaa(test)" _
& " Values(#" & Format(Date, "mm/dd/yyyy") & "#);"

こうかな?

QDATE型にNULLをセットするには?

Oracle初心者です。
Oracle9.2iのDATE型にNULLをセットする方法を教えてください。
UPDATE及びPL/SQLでセットする方法
ちなみに.net2005 VBの言語で、DATE型にNULLをセット方法も同時に教えてください。

Aベストアンサー

以下のフォーラムの情報で参考になりませんか?

http://otn.oracle.co.jp/cgi-bin/non/msgview_r.cgi?communityid=otn-901234&bbsid=1&no=22821&view=8

QOracle(オラクル)で、日付時刻型の検索方法について

質問させていただきます。
データベースはオラクルを使っていて、
SQL文で、抽出するときにエラーが出て困っています。

日付時刻型が「2005/05/26 19:13:00」という感じで入ってます。
2005/05/26 を抽出したいのですが、
BETWEEN '2005/05/26 00:00:00' AND '2005/05/26 23:59:59'

だと、エラーでできません。
どなた様か、ご教授よろしくお願いしますm(_ _)m

Aベストアンサー

日付検索を行う場合は、以下のように書式を含める必要があります。

col BETWEEN TO_DATE('2005/05/26 00:00:00','YYYY/MM/DD HH24:MI:SS') AND TO_DATE('2005/05/26 23:59:59','YYYY/MM/DD HH24:MI:SS')

ただ、厳密には

col >= TO_DATE('2005/05/26', 'YYYY/MM/DD')
AND
col < TO_DATE('2005/05/27', 'YYYY/MM/DD')

と書くべきでしょうね。

QACCESSで空白のデーターをクエリで判定/識別する方法を教えてくださ

ACCESSで空白のデーターをクエリで判定/識別する方法を教えてください。
EXCELでは空白を""で判定/識別表していますがACCESSではどうなるのでしょうか。

下の例はフィールドに試験番号があればその番号を、空白なら”欠席”と表示しようとしています。
IIf(([試験番号]="空白の場合何を入れる?"),[試験番号],"欠席")

Aベストアンサー

もうひとつの書き方は
式1: IIf([試験番号] Is Not Null,[試験番号],"欠席")
第2、第3引数の、質問の順序にあわせるとこうなる。


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

人気Q&Aランキング