
The Teradata Database 14.0 and later supports a data type called NUMBER. This data type supports fixed point decimal (Fixed Decimal) and floating point (Floating Decimal) numbers. Fixed decimals can support up to 38 significant digits. Floating decimals can support up 40 digits, however, the precision of the number is guaranteed only up to 38 digits.
TdNumber is the equivalent Provider Specific Type to NUMBER. The range of TdNumber is +/-[1E-130 to 9.99...9E125] as well as 0. It will also support a precision of up to 40 digits.
TdNumber can also be used to receive and send numbers from and to the Teradata Database.
'Declaration Public Structure TdNumber Inherits System.ValueType Implements System.Data.SqlTypes.INullable, System.IComparable, System.IComparable(Of TdNumber), System.IConvertible, System.IEquatable(Of TdNumber), System.IFormattable, System.Xml.Serialization.IXmlSerializable
'Usage Dim instance As TdNumber
public struct TdNumber : System.ValueType, System.Data.SqlTypes.INullable, System.IComparable, System.IComparable<TdNumber>, System.IConvertible, System.IEquatable<TdNumber>, System.IFormattable, System.Xml.Serialization.IXmlSerializable
public value class TdNumber : public System.ValueType, System.Data.SqlTypes.INullable, System.IComparable, System.IComparable<TdNumber>, System.IConvertible, System.IEquatable<TdNumber>, System.IFormattable, System.Xml.Serialization.IXmlSerializable
A number is stored in the following format:
X.XXXX...EYYYThe "X.XXXX..." represents the mantissa, and the "YYY" is the exponent (as a power of 10) of the number.
TdNumber supports arithmetic, comparison, and conversion methods .
TdNumber is similar to TdDecimal. The differences between these two types is that TdNumber can support a precision of up to 40 digits, and floating point numbers are supported. A TdDecimal can be implicitly converted to a TdNumber. A TdNumber must be explicitly converted to a TdDecimal.
A TdNumber value can be specified as an In, Out, or InOut parameter to a Stored Procedure. The following is an example of using TdNumber as a parameter to a Store Procedure.
public void ManipulateNumber(TdConnection cn) { // creating commands that will be used to execute SQL statements TdCommand cmd1 = cn.CreateCommand(); TdCommand cmd2 = cn.CreateCommand(); // query to rank the sales by region // TotalSales is defined as Number(15,4) cmd1.CommandText = "select RegionId, TotalSales, Rank(TotalSales) " + "from (select RegionId, sum(SalesAmt) as TotalSales " + "from DetailedSales group by RegionId) as SalesByRegion"; // setting up command that will insert rows returned from query into // the RankSalesByRegion table cmd2.CommandText = "insert into RankSalesByRegion (RegionId, " + "TotalSales, RegionRank) values (?, ?, ?)"; cmd2.Parameters.Add(null, TdType.BigInt, 0, System.Data.ParameterDirection.Input, true, 0, 0, null, System.Data.DataRowVersion.Default, null); // Precision and Scale do get defined for NUMBER. They are ignored by the provider. cmd2.Parameters.Add(null, TdType.Number, 0, System.Data.ParameterDirection.Input, true, 0, 0, null, System.Data.DataRowVersion.Default, null); cmd2.Parameters.Add(null, TdType.Integer, 0, System.Data.ParameterDirection.Input, true, 0, 0, null, System.Data.DataRowVersion.Default, null); // TdNumber sumOfSales = new TdNumber(0); // could also have been used TdNumber sumOfSales = 0; TdNumber avgSalesByRegion = 0; TdNumber totalSales; TdDataReader reader; // Loop through the result set: // Read data returned, and set the Value property of the corresponding // TdParameter with the data returned for each column. using (reader = cmd1.ExecuteReader()) { while (true == reader.Read()) { // Reading a BIGINT and // Setting the RegionId parameter cmd2.Parameters[0].Value = reader.GetInt64(0); // Reading Number and // Setting the TotalSales parameter totalSales = reader.GetTdNumber(1); cmd2.Parameters[1].Value = totalSales; // Seting the RegionRank parameter cmd2.Parameters[2].Value = reader.GetInt32(2); // Summing up on the total sales sumOfSales += totalSales ; cmd2.ExecuteNonQuery(); } } // Calculating the avg sales by region // The reader.RecordsReturned is explicitly converted to TdNumber avgSalesByRegion = sumOfSales / (TdNumber)(reader.RecordsReturned); cmd1.Dispose(); cmd2.Dispose(); }
public void CallCaculateSalesForRegion(TdConnection cn, Int32 RegionId) { // Creating commands that will be used to execute SQL statements TdCommand cmd1 = cn.CreateCommand(); // The CalculateSalesForRegion stored procedure has the // following parameters: // in RegionId Integer // out Rank Integer // out SalesForRegion Number(38, 2) // out PercentOfTotalSales Number(7, 4) cmd1.CommandText = "CaculateSalesForRegion"; cmd1.CommandType = System.Data.CommandType.StoredProcedure; // Setting up parameters to return sales information for the // specified region // // Parameter for the RegionId Cmd1.Parameters.Add(null, TdType.Integer, 0, System.Data.ParameterDirection.Input, true, 0, 0, null, System.Data.DataRowVersion.Default, RegionId); // Parameter for the Rank cmd1.Parameters.Add(null, TdType.Integer, 0, System.Data.ParameterDirection.Output, true, 0, 0, null, System.Data.DataRowVersion.Default, null); // Parameter for the SalesForRegion cmd1.Parameters.Add(null, TdType.Number, 0, System.Data.ParameterDirection.Output, true, 38, 2, null, System.Data.DataRowVersion.Default, null); // Parameter for the PercentOfTotalSales cmd1.Parameters.Add(null, TdType.Number, 0, System.Data.ParameterDirection.Output, true, 7, 4, null, System.Data.DataRowVersion.Default, null); // Execute the Stored Procedure cmd1.ExecuteNonQuery(); // Retrieve the data for each of the out parameters // Getting the data returned for the Rank Int32 rank = cmd1.Parameters[1].Value; // Getting the data returned for the SalesForRegion TdNumber salesForRegion = cmd1.Parameters[2].ProviderSpecificValue; // Getting the data returned for the PercentOfTotalSales // Since the parameter is defined as a Number(7,4) an // application can either retrieve the data using the // TdParameter.ProviderSpecificValue or TdParameter.Value property. // ProviderSpecificValue will contain a TdNumber structure. // Value will contains a System.Double structure. TdNumber tdPercentOfTotalSales = cmdl.Parameters[3].ProviderSpecificValue; System.Decimal sysPercentOfTotalSales = cmd1.Parameters[3].Value; // // CONTINUE PROCESSING THE DATA RETURNED FROM THE STORED PROCEDURE // cmd1.Dispose(); }
System.Object
System.ValueType
Teradata.Client.Provider.TdNumber
Target Platforms: Windows 7, Windows 8, Windows 8.1, Windows 10, Windows Server 2008, Windows Server 2008 R2, Windows Server 2012, Windows Server 2012 R2