1. ホーム
  2. sql

[解決済み] SQLサーバーで文字列をsmalldatetimeデータ型に変換する際、変換に失敗しました(静的値を除く)。

2022-02-07 12:44:19

質問事項

を持っています。 table 開始時刻と終了時刻を格納する。

I Got

文字列を smalldatetime に変換する際に、変換に失敗しました。 データ型になります。

を使用して以下のクエリを選択すると、エラーが発生します。 table .

select CAST(substring(CONVERT(varchar,convert(smalldatetime,o.StartTime),114), 1,2) as int) 
from TimeTable O

解析の結果、開始時刻が「0」のレコードはほとんどないことがわかりました。 '9:30 PM' というエラーが発生します。( その他のレコードには '09:30 PM' を開始時間として使用します)。午後9時30分」のレコードを除外したところ、クエリが正常に実行されました。

ここで問題なのは,

で明示的に値を指定すると select 文は、以下のようになります。

SELECT CAST(substring(CONVERT(varchar,convert('9:30 PM',o.StartTime),114), 1,2) as int) 

エラーは出ませんでした。

しかし table どなたかお手伝いしていただけませんか?

解決方法は?

実際にどのような出力を求めているのでしょうか?

9:30 PM' や '09:30 PM' のような値を Time 形式に変換したい場合は、以下のようにします。

SELECT CAST(CONVERT(VARCHAR(8), '9:30 PM', 108)AS TIME)
SELECT CAST(CONVERT(VARCHAR(8), '09:30 PM', 108)AS TIME)

その他、datetimeまたはsmalldatetimeで保存する場合

であれば、これはあなたのために動作します。

SELECT CAST(CONVERT(VARCHAR(8), '9:30 PM', 108)AS DATETIME)
SELECT CAST(CONVERT(VARCHAR(8), '09:30 PM', 108)AS DATETIME)