以下のガイドラインに従うと、Transact-SQL ステートメントを使用するデータベースやデータベース アプリケーションをある言語から別の言語に移行することが容易になり、複数の言語をサポートできます。
char
、varchar
、およびtext
の各データ型を使用しているすべての個所をそれぞれnchar
、nvarchar
、およびnvarchar(max)
データ型に置き換えます。 これを行うことにより、コード ページの変換の問題について考慮する必要がなくなります。 詳細については、「照合順序および Unicode のサポート」を参照してください。月単位または曜日単位で比較や操作を行う場合、名前の文字列ではない数字の日付要素を使用します。 言語設定が異なると、月や曜日の名前が異なります。 たとえば、DATENAME(MONTH,GETDATE()) は、言語の設定が英語 (U.S.) になっていれば "May" を返します。設定がドイツ語になっていれば "Mai"、フランス語になっていれば "mai" を返します。 代わりに、DATEPART のような関数を使用すると、月の名前の代わりに数字が返されます。 多くの場合、日付を数字で表記するよりも名前で表記する方がよりわかりやすくなるので、ユーザーに表示する結果セットを構築するときは、DATEPART 名を使用してください。 ただし、特定の言語の表示名に依存するロジックはコーディングしないでください。
日付を比較する場合、または INSERT ステートメントまたは UPDATE ステートメントで日付を指定する場合は、どの言語設定でも同じ解釈が行われる制約を使用します。
ADO、OLE DB、および ODBC アプリケーションでは、以下に示す ODBC タイムスタンプ、日付、時刻のエスケープ句を使用する必要があります。
{ ts'yyyy-mm-ddhh:mm:ss[.fff] '} 例: { ts'1998-09-24 10**:02:20' }**
{ d'次のような yyyy-mm-dd'} : { d'1998-09-24**'}**
{ t'hh:mm:s'} 例: { t'10:02:20'}
他の API、または Transact-SQL スクリプト、ストアド プロシージャ、トリガーを使うアプリケーションでは、区切られていない数字列を使う必要があります。 たとえば、 yyyymmdd には 19980924 を使用します。
他の API、Transact-SQL スクリプト、ストアド プロシージャ、トリガーを使用するアプリケーションでは、
time
、date
、smalldate
、datetime
、 datetime2、およびdatetimeoffset
データ型と文字文字列データ型間のすべての変換に対して明示的なスタイル パラメーターを指定して CONVERT ステートメントを使用する必要があります。 たとえば、次のステートメントは、すべての言語または日付形式の接続設定で同じように解釈されます。SELECT * FROM AdventureWorks2012.Sales.SalesOrderHeader WHERE OrderDate = CONVERT(DATETIME, '20060719', 101)
詳細については、「 CAST および CONVERT (Transact-SQL)」を参照してください。