Skip to main content

This is documentation for Caché & Ensemble. See the InterSystems IRIS version of this content.Opens in a new tab

For information on migrating to InterSystems IRISOpens in a new tab, see Why Migrate to InterSystems IRIS?

TO_NUMBER

文字列式を NUMBER データ型の値に変換する文字列関数です。

Synopsis

TO_NUMBER(string-expression)

TONUMBER(string-expression)

引数

string-expression 変換される文字列式。式は、列の名前、文字列リテラル、または他の関数の結果となります。基本となるデータ型は CHAR や VARCHAR2 のタイプです。

概要

TO_NUMBERTONUMBER という名前には、互換性があります。これらは、Oracle 互換性のためにサポートされています。

TO_NUMBER は、string-expression をデータ型 NUMERIC の数値に変換します。ただし、string-expression がデータ型 DOUBLE である場合、TO_NUMBER はデータ型 DOUBLE の数値を返します。

TO_NUMBER 変換は数値文字列を取り、プラス符号とマイナス符号を解決し、指数記数法 ("E" または "e") を展開して、先頭のゼロを削除することで、それをキャノニック形式の数値に変換します。TO_NUMBER は、非数値文字 (文字や数値グループ・セパレータなど) を検出すると変換を停止します。例えば、文字列 '7dwarves' は 7 に変換されます。string-expression の最初の文字が数値文字列ではない場合、TO_NUMBER は 0 を返します。string-expression が空文字列 ('') の場合、TO_NUMBER は 0 を返します。TO_NUMBER は、-0 を 0 に解決します。TO_NUMBER は、算術演算を解決しません。例えば、文字列 '2+4' は 2 に変換されます。string-expression に NULL を指定すると、TO_NUMBER は NULL を返します。

NUMERIC データ型の既定の SCALE は 2 です。したがって、表示モードでこの値を選択した場合、TO_NUMBER は常に小数点以下 2 桁で返り値を表示します。それ以下の小数桁数は小数点以下 2 桁に丸められ、末尾のゼロは小数点以下 2 桁に解決されます。また、xDBC を介して TO_NUMBER が使用されている場合、SCALE が 2 の NUMERIC としてタイプを返します。論理モードまたは ODBC モードで、返される値はキャノニック形式の数値です。また、小数桁数は使用されず、末尾のゼロは省略されます。

関連する SQL 関数

  • TO_NUMBER は、文字列をデータ型 NUMERIC の数値に変換します。

  • TO_CHAR は、TO_NUMBER とは逆の操作を実行し、数を文字列に変換します。

  • CASTCONVERT を使用することで、文字列を任意のデータ型の数値に変換できます。例えば、文字列をデータ型 INTEGER の数値に変換できます。

  • TO_DATE は、フォーマットされた日付文字列を日付整数に変換します。

  • TO_TIMESTAMP は、フォーマットされた日付/時刻文字列を標準のタイムスタンプに変換します。

以下の例では、TO_NUMBER がどのように文字列を数値に変換し、適切な SCALE のデータ型 NUMERIC としてそれを返すかを示しています。最初の例では表示モードで数値を返しており、2 番目の例では論理モードで数値を返しています。

  ZNSPACE "SAMPLES"
  SET myquery = "SELECT TO_NUMBER('+-+-0123.0093degrees')"
  SET tStatement = ##class(%SQL.Statement).%New()
  SET tStatement.%SelectMode=2
  SET qStatus = tStatement.%Prepare(myquery)
   IF qStatus'=1 {WRITE "%Prepare failed:" DO $System.Status.DisplayError(qStatus) QUIT}
  SET rset = tStatement.%Execute()
  DO rset.%Display()  // Display mode value: 123.01
  ZNSPACE "SAMPLES"
  SET myquery = "SELECT TO_NUMBER('+-+-0123.0093degrees')"
  SET tStatement = ##class(%SQL.Statement).%New()
  SET tStatement.%SelectMode=0
  SET qStatus = tStatement.%Prepare(myquery)
   IF qStatus'=1 {WRITE "%Prepare failed:" DO $System.Status.DisplayError(qStatus) QUIT}
  SET rset = tStatement.%Execute()
  DO rset.%Display()   // Logical mode value: 123.0093

以下の例では、string-expression がデータ型 DOUBLE である場合、TO_NUMBER がデータ型 DOUBLE として値を返すことを示しています。

  ZNSPACE "SAMPLES"
  SET myquery = "SELECT TO_NUMBER(CAST('+-+-0123.0093degrees' AS DOUBLE))"
  SET tStatement = ##class(%SQL.Statement).%New()
  SET tStatement.%SelectMode=2
  SET qStatus = tStatement.%Prepare(myquery)
   IF qStatus'=1 {WRITE "%Prepare failed:" DO $System.Status.DisplayError(qStatus) QUIT}
  SET rset = tStatement.%Execute()
  DO rset.%Display()  // Display mode value
  ZNSPACE "SAMPLES"
  SET myquery = "SELECT TO_NUMBER(CAST('+-+-0123.0093degrees' AS DOUBLE))"
  SET tStatement = ##class(%SQL.Statement).%New()
  SET tStatement.%SelectMode=0
  SET qStatus = tStatement.%Prepare(myquery)
   IF qStatus'=1 {WRITE "%Prepare failed:" DO $System.Status.DisplayError(qStatus) QUIT}
  SET rset = tStatement.%Execute()
  DO rset.%Display()   // Logical mode value

以下の例は、TO_NUMBER が数値の昇順で番地をリストする方法を示しています。

SELECT Home_Street,Name
FROM Sample.Person
ORDER BY TO_NUMBER(Home_Street)

その結果を文字列の昇順で並べられた同じデータと比較します。

SELECT Home_Street,Name
FROM Sample.Person
ORDER BY Home_Street

関連項目

FeedbackOpens in a new tab