2014-03-03 46 views
1

我已经写了一个查询,其中我提取的数字是'50,000','80,000'等数字。varchar到SQL中的数字

select Price_amount 
from per_prices 

由于这些值包含“”这些都被认为是varchar .Requirement是打印这些与‘数字’“”

即如何'50,000' 被认为是数而不是varchar

+2

这是SQL Server或Oracle? –

+1

定义“Concidered”?如果你打印它们 - 有什么区别?你在计算中使用它们吗? –

+0

它们不被视为varchar它们是varchar值。如果它是一个整数值,它不会有任何其他数字。 –

回答

0

,你可以结合Replacecast功能

SELECT CAST(REPLACE(Price_amount, ',', '') AS int) AS Price_Number FROM per_prices 

为更多信息请访问:'replace''cast'

SQLFiddle

1

如果一个值比它的数字其它任何东西,它不是一个整数,它包含字符串中的字符。在你的情况下,你有一个字符串包含字符50,

如果这是什么存储在您的数据库中,这就是你想要显示然后继续你不需要改变它整数或其他任何东西。但是,如果您在显示这些值之前对这些值进行了一些计算,那么您需要将它们更改为整数值。做计算。将它们更改回varchar数据类型以显示数千到数千的,并显示/选择它们。

DECLARE @TABLE TABLE (ID INT, VALUE VARCHAR(100)) 
INSERT INTO @TABLE VALUES 
(1, '100,000'),(2, '200,000'),(3, '300,000'),(4, '400,000'), 
(1, '100,000'),(2, '200,000'),(3, '300,000'),(4, '400,000') 

SELECT ID, SUM(
       CAST(
        REPLACE(VALUE, ',','') --<-- Replace , with empty string 
        AS INT)     --<-- Cast as INT 
      ) AS Total     --<-- Now SUM up Integer values 
FROM @TABLE 
GROUP BY ID 

SQL Fiddle

+0

也许我们应该向OP建议他在其数据库模式中更改数据类型?如果所有数据类型都将是Int或Money,那么他应该相应地反映他的数据库。思考? –

+0

@MarkLaREZZA你不可能就在那里。您将要进行计算的任何数据都需要使用Int/numeric/decimal/money数据类型。由于这是价格列,因此它必须位于Decimal或Money数据类型中。 –