0

私は SQL を初めて使用するわけではありませんが、最近、 として定義された列を保持するテーブルを作成しましたTIME。何らかの理由で、このフィールドに午前 12 時を少し下回る値を取得できません ( 23:59:99.999)。私の簡略化された TSQL は以下のとおりです。

DECLARE @Time TIME = '23:59:99.99999'
UPDATE tblProjectSLA
SET colSLATime = @Time
WHERE SLAID IN ( 22, 24)

次のエラーが表示されます。

メッセージ 241、レベル 16、状態 1、行 1
文字列から日付や時刻を変換するときに、変換に失敗しました。

時間の値を可能な限り低い時間「解像度」に設定することができ、フィールドが正常に更新されました。

DECLARE @Time DATETIME = '23:59'

これは、クエリを実行したときに SQL mgr に表示される結果です。

colSLATime
23:59:00.0000000

また、文字列値を TIME にキャストしようとしました...同じエラー:

DECLARE @Time TIME = CAST('23:59:99.99999' AS TIME)

私が奇妙だと思うのは、テーブルが 16 の精度と 7 のスケールに対して定義されていることです。テーブルに保存されている値に近いものを使用できないでしょうか?

列 colSLATime の定義方法は次のとおりです... (sp_help コマンドを使用し、読みやすくするために転置します)

Column_name           colSLATime
Type                  time
Computed              no
Length                5
Prec                  16
Scale                 7
Nullable              yes
TrimTrailingBlanks    (n/a)
FixedLenNullInSource  (n/a)
Collation             NULL

誰かが TIME データ型を使用することの内外についての簡単な議論に私を向けることができれば. または、実行時に VARCHAR フィールドと CAST を破棄して使用する必要があります (そうではないと思います)。

参照

time (Transact-SQL)
SQL Server 2008 R2
Range      00:00:00.0000000 through 23:59:59.9999999
4

1 に答える 1

1

さて、使ってみてください:

23:59:59.99999
------^ this digit is pretty important!

それ以外の

23:59:99.99999
------^

1 分間に 99 秒などというものはありません。

于 2013-03-01T19:19:22.537 に答える