質問

時間のみの値を挿入しようとしていますが、次のエラーが表示されます

  
      
  • 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に変換しないでください。浮動数値演算に固執します。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top