• 検索結果がありません。

STEP 6. 関数

6.2 データ型の変換関数: CONVERT、CAST

今度はエラーにはならず、正しく文字列が連結されていることを確認できます。

なお、FORMAT 関数を利用する場合は、「FORMAT(hiredate, 'yyyy 年')」と記述するこ とで同じ結果を取得することができます(FORMAT 関数の戻り値は nvarchar のため)。

CAST 関数

3. 次に、CONVERT 関数の代わりに、CAST 関数を利用してみましょう。

SELECT CAST( DATEPART(year, hiredate) AS char(4) ) + '年', * FROM emp

同じ結果を取得できたことを確認できます。CAST 関数では、引数が 1 つのみで、変換した いデータの後に「AS」を記述することに注意してください。

CONVERT による日付書式の変換(文字列への変換)

次に、CONVERT 関数を利用して、日付と時刻を文字列へ変換してみましょう。

4. まずは、「emp」テーブルの「hiredate」(入社日)列を varchar データ型へ変換してみま す。

SELECT CONVERT( varchar, hiredate ), * FROM emp

変換先のデータ型には、“varchar” とだけ指定し、最大バイト数を指定していませんが、この 場合は変換元の最大サイズに合わせて自動調整してくれます。これで日付を文字列へ変換する ことができます。しかし、結果は「月 日 年 時間」(MM DD YYYY)の順に表示されていま す。これを「年/月/日」(YYYY/MM/DD)の順で表示されるようにするには、CONVERT の 第3引数で「111」または「11」を指定するようにします。

5. それでは、CONVERT 関数の第3引数へ「111」を指定して試してみましょう。

SELECT CONVERT( varchar, hiredate, 111 ), * FROM emp

結果は、YYYY/MM/DD 形式で表示されていることを確認できます。このように CONVERT 関数の第3引数では、各国の日付/時刻表示に合わせた変換が行えるようになっています。

なお、FORMAT 関数を利用する場合は、「FORMAT(hiredate, 'yyyy/MM/dd')」と記述 することで同じ結果を取得することができます。

6. 次に、CONVERT 関数の第3引数へ「114」を指定して、実行してみます。

SELECT CONVERT( varchar, hiredate, 114 ), * FROM emp

結果は、時刻のみを取得できていることを確認できます。CONVERT 関数の第 3 引数では、

「114」または「14」を指定すると、時刻のみを取得できるようになります。

なお、FORMAT 関数を利用する場合は、「FORMAT(hiredate, 'HH:mm:ss.fff')」と記述 することで同じ結果を取得することができます。

Note: CONVERT の第3引数で指定できる値

CONVERT 関数の第 3 引数で指定できる値は、SQL Server オンライン ブックの「SQL Server データベース エンジン」→「Transact-SQL リファレンス」→「組み込み関数」→「変換関数」→「CAST および CONVERT」

トピックに記載されています。このトピックへは、クエリ エディターで CONVERT 関数を選択した状態で [F1]

キーを押下すると、自動的にオンライン ブックが開いて、このトピックへジャンプすることもできます。

Note: int データ型に対する数値演算の結果が int データ型になることに注意

int データ型に格納したデータに対して、数値演算(除算や集計関数で計算するなど)を行うと、計算結果も int ータ型なることに注意する必要があります。たとえば、集計関数の AVG(平均を取得できる関数)を利用して、

平均を計算したとしても、結果は int データ型になってしまいます。これでは、計算結果に小数点以下の値があっ た場合に、その値は切り捨てられてしまいます。

これは、「emp」テーブルの「sal」(給与)列を利用して試すことができます。この列に対して、AVG 関数を利用 して、全社員の平均給与を計算してみます(AVG 関数については、本自習書シリーズの「SQL 基礎の基礎」で説 明しています)。

SELECT AVG(sal) FROM emp

計算結果は「366999」となり、小数点以下の値が切り捨てられています。小数点以下の値が切り捨てられないよ うにするには、次のように CONVERT 関数を利用して、計算対象となる値を float や decimal データ型など、

小数点以下を扱えるデータ型へ変換するようにします。

SELECT AVG( CONVERT( float, sal) ) FROM emp

計算結果は「366999.8」となり、小数点以下の値を取得できたことを確認できます。

なお、次のように AVG 関数による計算結果に対して、float型へ変換する場合は、小数点以下を取得することは できません。

SELECT CONVERT( float, AVG(sal) ) FROM emp

小数点以下の値を取得したい場合は、あくまでも計算前に(計算対象となるデータを)変換しておくことに注意し てください。