仅将SQL中的数字值转换为int

时间:2016-11-09 13:52:52

标签: sql sql-server

我有这个问题:

SUBSTRING (
    dbo.Table.RNumber,
    1,
    CHARINDEX(
        '+',
        dbo.Table.RNumber
    ) - 1
) AS RoomNumber,
SUBSTRING (
    dbo.Table.R.Number,
    CHARINDEX(
        '+',
        dbo.Table.R.Number
    ) + 1,
    LEN(
        dbo.Table.R.Number
    )
) AS HallNumber,

我的桌子RNumber大多是2 + 3或3 + 5,但有时它像x + 5或y + 0。我想将字段转换为int,但我想转换字符串,如" x"或" y"我用谷歌搜索了但我无法找到解决方案。我怎样才能做到这一点?感谢。

3 个答案:

答案 0 :(得分:2)

你可以使用case语句试试这个

编辑使用isnumeric()方法

CASE 
    WHEN isnumeric(SUBSTRING(dbo.Table.RNumber,1,CHARINDEX('+',dbo.Table.RNumber) - 1)) = 1
        THEN SUBSTRING(dbo.Table.RNumber,1,CHARINDEX('+',dbo.Table.RNumber) - 1) 
    else 0 
end AS RoomNumber,
CASE 
    WHEN isnumeric(SUBSTRING(dbo.Table.R.Number,CHARINDEX('+',dbo.Table.RNumber) + 1,LEN(dbo.Table.R.Number))) = 1
        THEN SUBSTRING(dbo.Table.R.Number,CHARINDEX('+',dbo.Table.RNumber) + 1,LEN(dbo.Table.R.Number)) 
    else 0 
end AS HallNumber,

希望这可以解决您的问题

答案 1 :(得分:1)

也许您可以使用ParseName()和Try_Convert()

Declare @YourTable table (SomeField varchar(50))
Insert Into @YourTable values
('2+3'),('3+5'),('x+5'),('y+0')

Select *
      ,RoomNumber = IsNull(Try_Convert(int,ParseName(Replace(SomeField,'+','.'),2)),0)
      ,HallNumber = IsNull(Try_Convert(int,ParseName(Replace(SomeField,'+','.'),1)),0)
 From @YourTable

返回

SomeField   RoomNumber  HallNumber
2+3         2           3
3+5         3           5
x+5         0           5
y+0         0           0

答案 2 :(得分:1)

对于2012之前的版本,您可以这样做:

CASE 
WHEN NOT columnName like '%[^0-9]%' -- Contains no non-digits
AND columnName like '%[0-9]%' -- contains at least one digit
THEN CAST(columnName as INT) ELSE NULL 
END

(请注意,这将拒绝负数,但如果您需要支持,可以轻松调整它们)

或者使用IsNumeric,您必须先转换为float,因为Isnumeric接受Cast(EXPRESSION as INT)不接受的某些字符串:

CASE WHEN ISNUMERIC(columnName)=1 
THEN CAST(CAST(columnName as float) as int) END