2009-04-06 15 views
0

私のプロジェクトには、VB(5または6)*を使用してSQL Serverデータベースに日付を格納する必要があります。 SQLのdatetime型には時間が含まれていますが、これは嫌です。私はまた、VBの日付の表現がSQL Serverのそれを反映していないことに気付いています。VBからMS SQLに日付だけを保存するにはどうすればいいですか?

VBの日付型で保持されている日付をSQLデータベースに格納するには、その日付の真夜中の日時を使用します。

編集:日付を使用して行の下にある行を選択する必要があるため、読み込み時に切り捨てるだけではそれを取り除くことはできません。

*私は知っています、私はあなたでした、あなたはここから始まらないでしょう。しかし、制約を考えると、VB6/MS SQLはそこに出くわしますか?

答えて

3

VB6には、時刻部分がゼロになった日付/時刻値の日付部分を返すDateValue()関数があります。 (注:日付/時刻変数の時間部分は、時間12:00 AMと解釈されるであろう、「ゼロ設定」されている場合。)

+0

DateValue()にVB6 Dateを渡すと、DateValue()が文字列を受け取ってから文字列を返してくるため、暗黙的にdateからstringに変換されます。しかし、両方の変換では地域の設定が使用されるため、安全です。(暗黙の変換をトリガすると時々噛み付くことがあります) – MarkJ

0

DateTime列を使用し、プレゼンテーションレベルで時間を切り捨てます。

+0

申し訳ありませんが、キーの一部を構成しているため、ビューを変更することはできません。選択する必要があります。 –

+0

それは問題ではありません:ちょうど真夜中の時間を必ず保存してください。 –

0

このような日付を挿入して更新してみてください:

CAST(FLOOR(CAST(@DateTime AS float)) AS datetime) 

これはUDF内にあり、基本的にはdatetimeから時間部分を削除します。

2

SQL Server 2008にはnew date and time data typesがあります。時刻コンポーネントを保存しない場合は、「日付」データ型があります。

+0

ああ。残念ながら、私は顧客サイトで2008年を利用することに頼ることはできません! –

0

VBでは、Date()関数を使用して、時間要素のない現在の日付を返すことができます。

CommandオブジェクトでADO Parameterオブジェクトを使用する場合、OLE DBプロバイダはVB Date型のSQL Server DATETIME値への変換を処理する必要があります。

SQL Server(SQL 2005より前のSQL型)では、列にCHECK制約を作成して、time要素を含む日付を追加できないようにする必要があります(曖昧でない言語の '安全な'形式を使用しています私のDATETIMEリテラル用)

ALTER TABLE MyTable ADD 
    vb_date DATETIME NOT NULL 
    CONSTRAINT vb_date__no_time_element 
     CHECK ((vb_date = DATEADD(DAY, DATEDIFF(DAY, '1990-01-01T00:00:00.000', vb_date), '1990-01-01T00:00:00.000'))); 
0

私はちょうどDateSerialを使用して、必要な日付を作成します。あなたはそれを年月日に渡し、それはあなたに深夜の日付を与えます。その後、それを使用して、ADOコマンドまたは同様のものに対するパラメータとして渡すことができます。あなたがそれを読んだとき、それは深刻なことではないので、深夜になります。私は、文字列変換がないので、DateValueよりも好きです。本当に必要ならば、DateSerialを使用するDateValueのような独自の関数を作成することができます。

Function JustTheDatePlease(ByVal dtSource As Date) As Date 

    JustTheDatePlease = DateSerial(Year(dtSource), Month(dtSource), Day(dtSource)) 

End Function 

は、何らかの理由で、あなたはパラメータ化クエリを使用していない場合、あなたは本当にこのための良い言い訳は、あなたがあなたのクエリで日付のODBC正規の形式を使用することができていなければなりません。日付を {d 'yyyy-mm-dd'}(例えば {d '2009-04-06'})と書式設定するだけです。