[解決済み] datetimeの挿入時に文字列から日付や時刻を変換すると、変換に失敗する
SQLを実行しています。
create table table1(date1 datetime,date2 datetime);
insert into table1 values('21-02-2012 6:10:00 PM','01-01-2001 12:00:00 AM');
エラーになります。
varcharをdatetimeに変換できません。
そこで、スタックオーバーフローで提案されていた以下の形式を試してみました。
insert into table1 values(convert(datetime,'21-02-2012 6:10:00 PM',5)
,convert(datetime,'01-01-2001 12:00:00 AM',5));
しかし、まだエラーが出ています。
文字列から日付や時刻を変換する際に、変換に失敗しました。
解決方法は?
SQL Server がサポートする形式は多数あります。 CASTとCONVERTに関するMSDNブックスオンライン . それらのフォーマットのほとんどは 依存 そのため、これらの設定がうまくいく場合もあれば、うまくいかない場合もあります。
これを解決する方法は、(少し脚色していますが)このように ISO-8601 日付形式 SQL Server でサポートされているこの形式は、次のように動作します。 常に - SQL Server の言語や日付フォーマットの設定に関係なく、このようなことができます。
は ISO-8601形式 はSQL Serverでサポートされており、2つの種類があります。
-
YYYYMMDD
は日付だけです(時間部分はありません)ので、ここに注意してください。 ダッシュは使わないでください。 これはとても重要なことです。YYYY-MM-DD
は NOT SQL Server の日付フォーマットの設定に依存しないので、このようなことはありません。 ない はすべての状況で動作します。
または
-
YYYY-MM-DDTHH:MM:SS
日付と時刻の場合 - ここに注意: このフォーマット があります。 ダッシュ(ただし できる は省略される)、そして固定のT
の日付と時刻の部分をデリミタとして使用します。DATETIME
.
SQL Server 2000 以降のバージョンで有効です。
ですから、あなたの具体的なケースでは、これらの文字列を使用してください。
insert into table1 values('2012-02-21T18:10:00', '2012-01-01T00:00:00');
で大丈夫です(注意:インターナショナルな 24時間 の形式を使用します)。
または
SQL Serverを使用している場合
2008
またはそれ以降のバージョンでは
DATETIME2
データ型(単なる
DATETIME
と、現在の
INSERT
は、何の問題もなく動作するはずです。:-)
DATETIME2
SQL Server 2008 以降の日付/時刻データ型として推奨されているものです。
SELECT
CAST('02-21-2012 6:10:00 PM' AS DATETIME2), -- works just fine
CAST('01-01-2012 12:00:00 AM' AS DATETIME2) -- works just fine
なぜこの話題が厄介で、やや混乱するのか、私に聞かないでください。しかし
YYYYMMDD
という形式を使えば、どのバージョンのSQL Serverでも、どの言語とSQL Serverの日付形式の設定でも、問題なく使用できます。
関連
-
SQL集計、グループ化、ソート
-
MySQLのNULLについて解説した記事
-
mysqlのデータ圧縮性能比較 詳細
-
MySQL インタビューの質問 - ハッシュインデックスを設定する方法
-
[解決済み】MySQL - オペランドは1つのカラムを含む必要があります。
-
[解決済み】文字列からuniqueidentifierに変換する際に変換に失敗する - 2つのGUIDの場合
-
Mysql がエラーを報告 オペランドには 1 つのカラムが含まれている必要があります。
-
mysql がエラーを報告します。不明な文字セットです。'utf8mb4'
-
[解決済み] ユーザー 'root'@'localhost' (パスワード: YES を使用) のアクセス拒否 - 特権がない?
-
[解決済み] SQL Server の DateTime データ型から日付だけを返す方法
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
mysqlでインデックスに障害が発生する原因は何ですか?
-
MySqlの整数インデックスと文字列インデックスの失敗または暗黙の変換問題
-
MySQLのNULLについて解説した記事
-
MySQLはこのようなUpdateステートメントを書くべきではありません
-
Mysqlのソート機能の詳細
-
sql エラーを解決する オペランドには1つの列が含まれている必要があります。
-
Mysql がエラーを報告 オペランドには 1 つのカラムが含まれている必要があります。
-
MySQLの起動エラー:ERROR 2003 (HY000)。localhost'上のMySQLサーバーに接続できない(10061)
-
[解決済み] SQL Serverでdatetimeを挿入するためのSqlクエリ
-
[解決済み] ユーザー 'root'@'localhost' (パスワード: YES を使用) のアクセス拒否 - 特権がない?