質問
時間のみの値を挿入しようとしていますが、次のエラーが表示されます
- ex {" SqlDateTimeオーバーフロー。 1/1/1753 12:00:00 AMから12/31/9999 11:59:59 PMの間でなければなりません。"} System.Exception
フロントエンドから、「TimeEdit」を使用して時間を選択します。上矢印と下矢印で制御します。 SQL Serverのテーブルには、smalldatetimeとして設定されたフィールドがあります。時間を保存するだけです。以下を使用してアプリにデータを返します
select id、CONVERT(CHAR(5)、timeFrom、8)as timeFrom、CONVERT(CHAR(5)、timeTo、8)as timeTo FROM dbo.Availability id = @id およびdayName = @weekday
時間をテーブルにのみ渡す方法
編集〜ソリューション EuardoとChrisによると、私の解決策は、時刻のみの文字列ではなく、日時の文字列を渡すことでした。 時間形式に従って結果をフォーマットしました" g"。
ありがとう
解決
範囲内の日付(つまり1970/1/1)を選択し、挿入するすべての日付に使用します。
他のヒント
MSSQLでdatetimeの日付最小値である1/1/1753に日付を設定し、保存する時間を追加できます。もちろん、値を取得する必要があるたびにこれを考慮する必要がありますが、いくつかのヘルパーでそれをラップすることができます。 または、MSSQL 2008を使用して、新しいTIMEデータ型を使用できます。
時間のみを追跡する場合は、必要な粒度(秒、分、時間など)の深夜0時からのオフセットとして、intに格納することを検討してください。次に、適切なTimeSpan.From ??()メソッドを使用して、コード内でTimeSpanに変換できます。別の方法に戻るには、TimeSpan.Total ??を使用できます。必要に応じて切り捨てます。手動でクエリを実行する必要がある場合は、時間/分/秒を同等のオフセットに変換するSQL関数を作成できます。
これは、日時を使用して任意の日を選択するよりも、フィールドの目的を明確にし、混乱を軽減するため、これを好む。
SQLにはTimeのようなものはありません。DateTimeしかありません。
あなたの目的のために、このようなものを使用して時間部分のみを返します。
SELECT (GETDATE() - (CAST(FLOOR(CAST(GETDATE() as FLOAT)) AS DateTime)))
ここで、GETDATE()はフィルタリングする日時です。
データベースで時刻を設定する場合、「01/01/1901」または「01/01/1753」を時刻に追加する必要があります。
datetimeを使用する場合、CASTを使用せず、varcharに変換しないでください。浮動数値演算に固執します。