好的,所以我有一个ASN_NO,它可以是30个字符。
我需要拍摄10个最正确的角色。没问题。
// Create the Google Api Client with access to Plus and Games
mGoogleApiClient = new GoogleApiClient.Builder(getApplicationContext())
.addConnectionCallbacks(this)
.addOnConnectionFailedListener(this)
.addApi(Plus.API).addScope(Plus.SCOPE_PLUS_LOGIN)
.addApi(Games.API).addScope(Games.SCOPE_GAMES)
.build();
但有时ASN_NO可能少于10个字符,在这种情况下我需要用左零填充它。
SUBSTR(ASN_NO,-10, 10) -- this works fine
那么如果我尝试联合使用它们
LPAD(ASN_NO,10,'0') -- this works when less than 10 characters, except when having an ASN_NO greater it substrings from the left
然后我想出了这个:
LPAD(SUBSTR(ASN_NO,-10, 10),10,'0') -- this gives me a null result when less than 10 but i dont understand why?
这个最后一个声明使用长度与子串一起使用时少于10个有效...但是我是否过度使用这个/过度思考这个?任何人都知道什么是更清洁的方式?
答案 0 :(得分:1)
当你要求字符串的最后10个字符少于10个字符时,你会得到NULL。
首先需要LPAD,然后再需要SUBSTR。
当你想让所有角色一直到最后时,SUBSTR的第二个参数(LENGTH)已经过时了。
答案 1 :(得分:1)
您可以使用nvl
功能,例如:
lpad(nvl(SUBSTR(ASN_NO,-10),asn_no),10,'0')
如果长度小于10,则SUBSTR(ASN_NO,-10)
返回null,因此在这种情况下,nvl函数将返回整个字符串。
作为一个注释,你不需要指定第三个参数来获得最后10个字符,substr(ASN_NO,-10)就足够了。