SQL Serverでは使用できない標準SQLと代替SQL

基本的に、標準SQLは全てのRDBMで使用できます!

ですが一部の標準SQLは、特定のRDBMSで使用できません!

※つまり特定のRDBMSは、一部の標準SQLを実装していません。
※また特定のRDBMSでのみ使用できるSQL(方言)があります。

この記事では
 ・SQL Serverでは使用できない標準SQL
 ・代替となるSQL
を記載します!

MOD関数(割り算の余りを取得する関数)

標準SQLのMOD関数は、SQL Serverで使用できません。
代替SQLとして、SQL Serverでは「%演算子」があります。

SELECT 
	7 % 3 AS '割り算の余り'

文字列結合の演算子「||」

標準SQLの演算子「||」は、SQL Serverで使用できません。
代替SQLとして、SQL Serverでは「+演算子」があります。

SELECT 
	'aiueo' + 'あいうえお' AS '文字列結合'

LENGTH関数(文字数を取得する関数)

標準SQLのLENGTH関数は、SQL Serverで使用できません。
代替SQLとして、SQL Serverでは「LEN関数」があります。

SELECT 
	LEN('aiueo') AS '文字数'

SUBSTRING関数(文字数の一部を切り出す関数)

SQL ServerでもSUBSTRING関数を使用することはできますが、
 ・標準SQLの「SUBSTRING関数」と
 ・SQL Serverの「SUBSTRING関数」では、
構文(引数)が違います。

「SQL ServerのSUBSTRING関数」の構文(引数)は以下となります。

SUBSTRING (対象文字列, 切り出し開始位置, 切り出す文字数)

SELECT 
	SUBSTRING('aiueo',2,3) AS '文字数'

CURRENT_DATE関数(現在の日付を取得する関数)

標準SQLのCURRENT_DATE関数は、SQL Serverで使用できません。
代替SQLとして、SQL Serverでは「GETDATE関数」等があります。

ただ「GETDATE関数」は日付のみでなく時間も取得するため、
時間を除いた日付のみ取得する際は、
 ・FORMAT関数
 ・CONVERT関数
を使用します。

SELECT 
	GETDATE()                        AS 'GETDATE関数のみ',
	FORMAT(GETDATE(),'yyyy/MM/dd')   AS 'FORMATを使用',
	CONVERT(NVARCHAR,GETDATE(),111)  AS 'CONVERTを使用'

EXTRACT関数(日付から「年」等の一部を切り出す関数)

標準SQLのEXTRACT関数は、SQL Serverで使用できません。
代替SQLとして、SQL Serverでは「DATEPART関数」等があります。

SELECT
	GETDATE()                 AS 'GETDATE関数のみ',
	DATEPART(YEAR, GETDATE())  AS 'YEAR',
	DATEPART(MONTH, GETDATE()) AS 'MONTH',
	DATEPART(DAY, GETDATE())   AS 'DAY',
	DATEPART(HOUR, GETDATE())  AS 'HOUR'

  

以下の理由により、RDBMSは様々な違いがあります。

・標準SQLの整備が遅れた
・他のRDBMSには無い機能を作成することで、優位な立場を得る
・他のRDMBSに乗り換えられないようにする

標準化が徹底されていないという事実は、
利用者からすれば迷惑な話ですが、
企業としては仕方がないことではあります。

タイトルとURLをコピーしました