DB2判断汉字长度、对数字字符进行判断

原创
2013/08/17 12:48
阅读数 4.6K

                项目有个模块需要写校验规则,而规则中有个需求是这么描述的

XXX要求大于三个字符或两个汉字,把不满足的都过滤出来。 

对于字符判断长度的想必大家都知道用length()函数,但是对于汉字呢?这是个问题。

通过用length函数测出一个汉字的长度是3,即一个汉字等于3个字节长度。(BTW:项目用的DB2设置的编码格式是UTF-8)

通过查看DB2文档,发现length函数是可以通过编码格式不同来实现输出不同的长度,具体如下:

LENGTH scalar function

Read syntax diagramSkip visual syntax diagram >>-LENGTH--(--expression--+--------------------+--)------------><
                          '-,--+-CODEUNITS16-+-'      
                               +-CODEUNITS32-+        
                               '-OCTETS------'        

expression

An expression that returns a value that is a built-in data type. If expression can be null, the result can be null; if expression is null, the result is the null value.

CODEUNITS16, CODEUNITS32, or OCTETS

Specifies the string unit of the result. CODEUNITS16 specifies that the result is to be expressed in 16-bit UTF-16 code units. CODEUNITS32 specifies that the result is to be expressed in 32-bit UTF-32 code units. OCTETS specifies that the result is to be expressed in bytes.

最后过滤语句为


( length(r.ITEM, CODEUNITS32)<2 or length(r.ITEM)<3)


对于数字字符的判断,用到的函数是translate()

TRANSLATE scalar function

character string expression:

Read syntax diagramSkip visual syntax diagram >>-TRANSLATE--(--char-string-exp-------------------------------->

>--+-----------------------------------------------------------+-->
   |                                       .-,--' '----------. |   
   '-,--to-string-exp--,--from-string-exp--+-----------------+-'   
                                           '-,--pad-char-exp-'     

>--)-----------------------------------------------------------><

The TRANSLATE function returns a value in which one or more characters in a string expression might have been converted to other characters.

The function converts all the characters in char-string-exp or graphic-string-exp that also occur in from-string-exp to the corresponding characters in to-string-exp or, if no corresponding characters exist, to the pad character specified by pad-char-exp.

char-string-exp or graphic-string-exp

Specifies a string that is to be converted. The expression must return a value that is a built-in CHAR, VARCHAR, GRAPHIC, VARGRAPHIC, numeric, or datetime data type. If the value is not a CHAR, VARCHAR, GRAPHIC, or VARGRAPHIC data type, it is implicitly cast to VARCHAR before evaluating the function.

to-string-exp

Specifies a string of characters to which certain characters in char-string-exp will be converted.The expression must return a value that is a built-in CHAR, VARCHAR, GRAPHIC, VARGRAPHIC, numeric, or datetime data type. If the value is not a CHAR, VARCHAR, GRAPHIC, or VARGRAPHIC data type, it is implicitly cast to VARCHAR before evaluating the function.If a value for to-string-exp is not specified, and the data type is not graphic, all characters in char-string-exp will be in monocase; that is, the characters a-z will be converted to the characters A-Z, and other characters will be converted to their uppercase equivalents, if they exist. For example, in code page 850, é maps to É, but ÿ is not mapped, because code page 850 does not include Ÿ. If the code point length of the result character is not the same as the code point length of the source character, the source character is not converted.

from-string-exp

Specifies a string of characters which, if found in char-string-exp, will be converted to the corresponding character in to-string-exp.

The expression must return a value that is a built-in CHAR, VARCHAR, GRAPHIC, VARGRAPHIC, numeric, or datetime data type. If the value is not a CHAR, VARCHAR, GRAPHIC, or VARGRAPHIC data type, it is implicitly cast to VARCHAR before evaluating the function.If from-string-exp contains duplicate characters, the first one found will be used, and the duplicates will be ignored. If to-string-exp is longer than from-string-exp, the surplus characters will be ignored. If to-string-exp is specified, from-string-exp must also be specified.

pad-char-exp

Specifies a single character that will be used to pad to-string-exp if to-string-exp is shorter than from-string-expThe expression must return a value that is a built-in CHAR, VARCHAR, GRAPHIC, VARGRAPHIC, numeric, or datetime data type. If the value is not a CHAR, VARCHAR, GRAPHIC, or VARGRAPHIC data type, it is implicitly cast to VARCHAR before evaluating the function. The value must have a length attribute of zero or one. If a zero-length string is specified, characters in the from-string-exp with no corresponding character in the to-string-exp are removed from char-string-exp or graphic-string-exp. If a value is not specified a single-byte blank character is assumed.



具体实现语句如下:
length(trim(translate(r.ITEM,'','0123456789')))=0
这条sql语句简单说明,当ITEM字段的中包含0~9中的任一数字时,就替换为空字符,当全部为数字时,就全部替换为空字符了,通过trim()函数去空格然后length函数一测量,连渣都不剩了.为0.此时就可以判定为全部是数字字符了。

展开阅读全文
打赏
0
3 收藏
分享
加载中
更多评论
打赏
0 评论
3 收藏
0
分享
OSCHINA
登录后可查看更多优质内容
返回顶部
顶部