SQL ServerのDATETIMEとは?文字列からの変換や注意点も紹介
- システム
エンジニア - SQL ServerのDATETIMEについて教えてください。
- プロジェクト
マネージャー - SQL ServerのDATETIMEとは日付型です。種類や使用方法を紹介します。
SQL ServerのDATETIMEとは
SQL Serverにおいて、日付や時刻を扱いたいということは多くあると思います。そのような場合にはDATETIMEを代表とする日付型を使用します。
ここではSQL Serverでの日付型の扱い方を解説します。
SQL Serverの日付型の種類3つ
SQL Serverの日付および時刻のデータ型は複数の種類が存在します。その中でも代表的であり、よく使用される3つを紹介します。
それぞれについて形式と範囲を紹介しますので、目的に応じて使い分けるようにしましょう。
1:DATE
DATEは、日付のみを定義する日付型です。
形式と範囲は以下のとおりです。
- 形式:YYYY-MM-DD
- 範囲:0001-01-01 ~ 9999-12-31
2:DATETIME
DATETIMEは、1秒未満の秒を含む24時間形式の日時を定義する日付型です。
形式と範囲は以下のとおりです。
- 形式:YYYY-MM-DD hh:mm:ss[.nnn]
- 範囲:1753-01-01~9999-12-31
3:DATETIME2
DATETIME2は、1秒未満の秒を含む24時間形式の日時を定義する日付型です。
既存のDATETIME型を拡張して日付範囲と既定の有効桁数が増えており、必要に応じて有効桁数の指定が可能です。
形式と範囲は以下のとおりです。
- 形式:YYYY-MM-DD hh:mm:ss[.nnnnnnn]
- 範囲:0001-01-01~9999-12-31(時刻は00:00:00~23:59:59.9999999)
SQL Serverで文字列を日付型に変換する2つの方法
では、さっそく使い方を見ていきましょう。
CONVERTを使う方法3つ
CONVERTは任意の値を、指定したデータ型に変換するための関数です。
そして、CONVERT関数を使って文字列から日付型に変換する場合は、下記のように書きます。
1
|
CONVERT(日付型, 文字列, (スタイル))
|
※スタイルは省略可能です。
実際に書くと、このような記載になります。
1:年月日を指定
1
2
|
SELECT CONVERT(DATETIME, ‘20190101’)
結果|2019-01-01 00.00.00.000
|
2:年月日をスラッシュで区切る
1
2
|
SELECT CONVERT(DATETIME, ‘2019/01/01’)
結果|2019-01-01 00.00.00.000
|
3:日時を指定
1
2
|
SELECT CONVERT(DATETIME, ‘20190101 12:30:00’)
結果|2019-01-01 12:30:00.000
|
CASTを使う場合
CASTも、CONVERTと同様に値を任意のデータ型に変換することのできる関数です。
CASTを使う場合は以下のように書きます。
1
|
CAST(文字列 AS 日付型)
|
実際に書くと、このような記載になります。
年月日を指定
1
2
|
SELECT CAST(‘2019/01/01’ AS DATETIME)
結果|2019-01-01 00.00.00.000
|
日時を指定
1
2
|
SELECT CAST(‘2019/01/01 12:30:00’ AS DATETIME)
結果|2019-01-01 12:30:00.000
|
SQL ServerでDATETIMEを使う際の注意点
SQL ServerでDATETIME型を使用する場合、丸め誤差に注意する必要があります。
datetime型の精度では、秒数の小数3桁目が0、3、7のいずれかに丸められます。例えば、「00:00:00.214」という時刻は「00:00:00.213」に丸められます。
これにより、データを検索して取得する際に期待した結果が得られない場合がありますので注意しましょう。
- システム
エンジニア - SQL ServerのDATETIMEは3種類あるのですね。
- プロジェクト
マネージャー - はい。目的に応じて使い分けてみてください。
SQL ServerでDATETIMEを使って日付データを取得しよう
今回は、SQL Serverで使いやすい日付型や、文字列と日付型の変換方法を紹介しました。たかが日付型ですが、されど日付型です。深く考えずに日付型を指定すると、入力値が無かったときにバグが出るなど思わぬエラーに遭遇することもありますので、ぜひシステムに適した日付型を使うようにしてみてください。そして、正しく日付データを取得できるようにしましょう。
FEnet.NETナビ・.NETコラムは株式会社オープンアップシステムが運営しています。
株式会社オープンアップシステムはこんな会社です
秋葉原オフィスには株式会社オープンアップシステムをはじめグループのIT企業が集結!
数多くのエンジニアが集まります。
-
スマホアプリから業務系システムまで
スマホアプリから業務系システムまで開発案件多数。システムエンジニア・プログラマーとしての多彩なキャリアパスがあります。
-
充実した研修制度
毎年、IT技術のトレンドや社員の要望に合わせて、カリキュラムを刷新し展開しています。社内講師の丁寧なサポートを受けながら、自分のペースで学ぶことができます。
-
資格取得を応援
スキルアップしたい社員を応援するために資格取得一時金制度を設けています。受験料(実費)と合わせて資格レベルに合わせた最大10万円の一時金も支給しています。
-
東証プライム上場企業グループ
オープンアップシステムは東証プライム上場「株式会社夢真ビーネックスグループ」のグループ企業です。
安定した経営基盤とグループ間のスムーズな連携でコロナ禍でも安定した雇用を実現させています。
株式会社オープンアップシステムに興味を持った方へ
株式会社オープンアップシステムでは、開発系エンジニア・プログラマを募集しています。
年収をアップしたい!スキルアップしたい!大手の上流案件にチャレンジしたい!
まずは話だけでも聞いてみたい場合もOK。お気軽にご登録ください。
SQLServer新着案件New Job
-
蔦屋書新店オープンに関するアプリ開発/Oracle/東京都渋谷区/【WEB面談可】/在宅勤務
月給56万~59万円東京都渋谷区(神泉駅) -
資産運用会社向け残高管理システム運用保守/SQLServer/東京都中央区/【WEB面談可】
月給50万~60万円東京都中央区(銀座駅) -
資産運用会社向け残高管理システム開発のテスター/SQLServer/東京都中央区/【WEB面談可】
月給25万~35万円東京都中央区(銀座駅) -
放射線部門システムパッケージの運用保守/Oracle/東京都港区/【WEB面談可】
月給50万~60万円東京都港区(品川駅) -
放射線部門システムパッケージの開発のテスター/Oracle/東京都港区/【WEB面談可】
月給25万~35万円東京都港区(品川駅) -
営業フロントシステム運用保守/ASP.NET/東京都江東区/【WEB面談可】
月給50万~60万円東京都江東区(木場駅)