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

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

CAST 関数

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

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

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

Note: CONVERT と CAST の使い分け

CAST は ANSI SQL92 規格、CONVERT は SQL Server 独自の関数なので、CAST を利用したほうが他のデー タベース製品を利用する場合に役立ちます。ただ、SQL Server 6.5 までは CAST がサポートされていなかった ので、CONVERT を利用する SQL Server ユーザーは多く、また、この後説明する CONVERT にしかできない 日付の変換もあるので、CONVERT に統一して利用しても問題ありません。

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

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

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

SELECT CONVERT( varchar, hiredate ), * FROM emp

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

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

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

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

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

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

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

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

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

CONVERT 関数の第 3 引数で指定できる値は、SQL Server オンラ゗ン ブックの「データベース エンジン」→

「テクニカル リファレンス」→「Transact-SQL リファレンス」→「CAST および CONVERT」トピックに記 載されています。このトピックへは、クエリ エデゖタで CONVERT 関数を選択した状態で [F1] キーを押下 すると、自動的に SQL Server オンラ゗ン ブックが開いて、このトピックへジャンプすることができます。

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

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