2

我有一张这样的桌子

productId Inventory 
--------------------    
1            1
2            Ab
3            12.5
4            6
6            2

如何选择库存为int和其他值为零,在Inventory哪里varchar

4

4 回答 4

3

假设这是 SQL Server,那么您可以这样做:

SELECT productid, 
  CAST((CASE isnumeric(inventory) 
          WHEN 0 THEN 0 
          ELSE CAST(Inventory AS DECIMAL(10, 2)) 
        END) AS INT) AS Inventory 
FROM tablename

SQL 小提琴演示

这会给你:

| PRODUCTID | INVENTORY |
-------------------------
|         1 |         1 |
|         2 |         0 |
|         3 |        12 |
|         4 |         6 |
|         6 |         2 |
于 2013-02-24T06:28:20.760 回答
2

如果您希望像 12.5 这样的十进制值以整数而不是小数的形式出现,则必须执行以下操作来修剪小数位:

select case when isNumeric(Inventory) = 1 then cast(cast(Inventory as DECIMAL(10,0)) as INT) else 0 end as Inventory_INT, productId
from PRODUCTS
于 2013-02-24T06:32:49.903 回答
0
select case when isnumeric(inventory) then
       cast(inventory as INT)
else
       0
end
于 2013-02-24T06:26:14.367 回答
0

你使用起来更安全PatIndex()IsNumeric不是在 sql-server 中检查数值的最佳方法,因为它也会为货币符号返回 1(例如,isnumerc('$') 等于1)msdn

以下示例不四舍五入十进制值。如果您需要向上取整值,则将库存转换为小数。Sql-Demo使用Patindex()函数。

select productId, case patindex('%[0-9]%',inventory) 
                  when 1 then convert(int,convert(decimal(10,2),inventory))
                  else 0 end inventory
from T


| PRODUCTID | INVENTORY |
-------------------------
|         1 |         1 |
|         2 |         0 |
|         3 |        12 |--NOTE
|         4 |         6 |
|         6 |         2 |
|         7 |         0 |--Extra data row added with '$'

从库存中获取四舍五入的值;

select productId, case patindex('%[0-9]%',inventory) 
                  when 1 then convert(decimal,inventory)
                  else 0 end inventory
from T

| PRODUCTID | INVENTORY |
-------------------------
|         1 |         1 |
|         2 |         0 |
|         3 |        13 |--NOTE
|         4 |         6 |
|         6 |         2 |
|         7 |         0 |--Extra data row added with '$'
于 2013-02-24T09:51:43.393 回答