Sybase计算字段内容长度,解析出问题

最近在工作中遇到一个问题,需要计算一个字段内容的长度。我对那个字段进行 case when len(&xxxxx_xxxx) > 0 then 时,每次编译后的文件里面就变成了case when 11 > 0 then  。

怎么在编译的时候就把len(&xxxxx_xxxx) 计算成11了呢?这个11貌似正好等于把&xxxxx_xxxx 作为字符串的长度!

然后我又看到项目中别的地方也用到了一个case when len(&yyy_yyyyyyy_yyyyy) > 25,而这个地方编译完之后还是case when len(&yyy_yyyyyyy_yyyyy) > 25,没把&yyy_yyyyyyy_yyyyy作为字符串计算出来长度。

2个地方写的都是一样的,为什么那个地方没问题,我这个地方又有问题呢?

于是我查了一下数据库里面的字段类型,发现别人写的那个字段yyy_yyyyyyy_yyyyy是varchar类型,而我写的那个字段xxxxx_xxxx是text类型。难道是因为这个类型的原因吗?

然后我查了一下sybase中计算字段内容长度的函数,发现datalength这个函数对text类型很好用,只不过datalength函数计算的是字节数,而len函数计算的是字符数,对我的业务没什么影响。于是我就试了一下,把我的代码改成case when datalength(&xxxxx_xxxx) > 0 then,改完果然编译之后就不会去计算了,终于解决!

当然,虽然问题解决了,但是为什么text类型的字段用len函数会在编译的时候就把字段名作为一个字符串计算出来,这个问题我还没弄懂。如果以后什么时候弄明白了再来补充吧。

猜你喜欢

转载自www.cnblogs.com/LisaJ/p/9138620.html
今日推荐