これまでTransact-SQLの主要な関数について紹介してきました。これらの関数を組み合わせることで、他のDBや言語にある関数と似た結果を出力させることもできます。記述方法は色々ありますが、参考までに幾つかの例を紹介します。

関数の組み合わせ例


--バイト数による先頭文字の取り出し:LEFTB
SELECT CONVERT(varchar(10), 'あいうえ123')
/* → あいうえ12 (左から10バイト分を取り出し) */

--バイト数による行末文字の取り出し:RIGHTB
SELECT REVERSE(CONVERT(varchar(10), REVERSE('あいうえ123')))
/* → いうえ123 (右から10バイト分を取り出し)*/


--数値の左詰め:LPAD
SELECT REPLICATE('0' ,5 - LEN(250)) + CONVERT(varchar(5),250)
/* → '00250' (250という数字を5桁でゼロ埋め)*/


--半角スペースの右詰め(varchar):RPAD
DECLARE @VAL1 varchar(10)
SET @VAL1 = 'あいうえ1'
SELECT @VAL1 + SPACE(10 - DATALENGTH(@VAL1))
/* → 'あいうえ1 ' (10バイトで空白埋め)*/

--半角スペースの右詰め(nvarchar):RPAD
DECLARE @VAL2 nvarchar(10)
SET @VAL2 = 'あいうえ1'
SELECT CONVERT(varchar(10),@VAL2) + ISNULL(SPACE(10 - DATALENGTH(CONVERT(varchar,@VAL2))),'')
/* → 'あいうえ1 ' (10バイトで空白埋め)*/


--時刻の切り捨て:TRUNC
DECLARE @DT datetime
SET @DT = '2008-02-28 12:34:56'
SELECT CONVERT(datetime,convert(varchar,@DT ,111))
/* → 2008-02-28 00:00:00.000 */

--月末日:LAST_DAY
SET @DT = '2008-12-03'
SELECT DATEADD(day, -DAY(@DT), DATEADD(month,1,@DT))
/* → 2008-12-31 */


--日付時刻で秒を切り捨て
SELECT REPLACE(CONVERT(char(16),GETDATE(),120),'-','/')
/* → 2008/09/30 19:25 */

--先頭のゼロの除去
SELECT REPLACE(CONVERT(varchar,GETDATE(),111),'/0','/')
/* → 2008/9/30 */

--漢字の年月
SELECT CONVERT(varchar,YEAR(GETDATE())) + '年' + CONVERT(varchar,MONTH(GETDATE())) + '月'
/* → 2008年9月 */

以上、Transact-SQLにて良く利用される関数について紹介してきました。本稿がSQL Server開発でのSQLプログラミングに役立てば幸いです。