TO_NUMBER
Synopsis
TO_NUMBER(string-expression) TONUMBER(string-expression)
引数
string-expression | 変換される文字列式。式は、列の名前、文字列リテラル、または他の関数の結果となります。基本となるデータ型は CHAR や VARCHAR2 のタイプです。 |
概要
TO_NUMBER と TONUMBER という名前には、互換性があります。これらは、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 とは逆の操作を実行し、数を文字列に変換します。
-
CAST と CONVERT を使用することで、文字列を任意のデータ型の数値に変換できます。例えば、文字列をデータ型 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