代码之家  ›  专栏  ›  技术社区  ›  Cobus Kruger

将int值转换为太小的字符

  •  3
  • Cobus Kruger  · 技术社区  · 14 年前

    在MSSQL 2005上尝试以下操作:

    select convert(char(2), 123)
    

    这里的关键是char(2)太小,无法接受值“123”。我希望在这里看到截断错误,但是返回值“*”。

    其中一些答案说明了如何以一种会导致错误的方式进行转换。那不是我真正需要的。我们有很多代码使用一个特定的字段,这个字段以前被声明为char(2),但后来被改为int。我的目标是确保没有被转换的代码在遇到无法处理的数据时会崩溃。所以我们可以去修理它。

    dsolimano Justin Niessner 注意这两个都是设计的。奇怪的是,nchar支持Unicode,嘿?

    5 回复  |  直到 7 年前
        1
  •  3
  •   dsolimano    14 年前

    微软的 convert/cast page 似乎表明如果您想得到一个错误而不是 * 或者截短,这就是我得到的:

    SELECT CAST(123 AS NCHAR(2))
    
    Msg 8115, Level 16, State 2, Line 3
    Arithmetic overflow error converting expression to data type nvarchar.
    
        2
  •  1
  •   Justin Niessner    14 年前

    向下滚动以下MSDN页面:

    CAST and CONVERT (Transact-SQL)

    直到你找到标题 截断和舍入结果

    你会看到你看到的行为就是定义的行为。

    select cast(convert(varchar(10), 123) as char(2))
    
        3
  •  0
  •   Thomas    14 年前

    只需将其转换为可变长度的字符串,然后再将其转换为太小的字符串。

    Select Cast( Cast( 123 as varchar(10) ) As char(2) )
    
        4
  •  0
  •   Andomar    14 年前

    SQL Server将毫无问题地截断字符串。所以你可以把值转换成 varchar 先把它扔给 char(2)

    select convert(char(2), cast(123 as varchar(128))
    
        5
  •  0
  •   Robin Day    14 年前

    取决于你所说的“阻止”这件事发生是什么意思?你希望发生什么?没有什么?

    DECLARE @number INT
    SET @number = 123
    
    IF(@number < 100) SELECT CONVERT(char(2), @number)