我在IBM db2数据库中有一个NUMERIC(5,0)字段,我只希望前四位数字。使用CAST我一直无法达到我想要的。对数字字段的第一个数字进行的SQL查询
我怎样才能实现这一点在SQL中没有强制转换为字符串和使用子字符串?
例如:13525 - > 1352
感谢您的帮助!
我在IBM db2数据库中有一个NUMERIC(5,0)字段,我只希望前四位数字。使用CAST我一直无法达到我想要的。对数字字段的第一个数字进行的SQL查询
我怎样才能实现这一点在SQL中没有强制转换为字符串和使用子字符串?
例如:13525 - > 1352
感谢您的帮助!
为什么不投射为字符串并使用子字符串?
你也可以这样做:
select (case when field >= 10000 then floor(field/10) else field end)
此假设,如果该字段有1234
,那么你要1234
而非0123
。
编辑:
你也可以使用一个字符串,通过使用两个调用cast()
:
select cast(left(cast(field as varchar(5)), 4) as numeric(4, 0))
我也应该注意到,在许多数据库中,你可以这样做:
select left(field, 4)
和数据库将执行适当的转换。我没有附近的DB2来检查这一点。
我知道这是可能的,但正如问题中所述,我想要一个不使用子字符串的解决方案。 – Simon 2014-09-26 19:30:16
@Simon此解决方案不使用子字符串。 – dasblinkenlight 2014-09-26 19:30:48
@dasblinkenlight是的,我指的是答案的第一行。发布的查询似乎工作正常,但我想知道是否有一个“更干净”的方式来做到这一点。如果不是,我会接受这个答案,因为它符合我的需要。 – Simon 2014-09-26 19:31:51
总是5位数? – 2014-09-26 19:29:51
@ChrisBarlow是的 – Simon 2014-09-26 19:30:34