最新消息:本站持续更新中,请注意添加收藏夹。搜索关键词时,多换一个同义词。比如要搜索界面,可以尝试页面,画面,PER档等词汇。善于搜索,将大大提高你的查找效率。

BDL-FGL_BASE 数据类型(2)

开发相关 bron1984 3112浏览

BDL基础数据类型
字符类型
1、 CHAR              固定长度字符类型
2、 VARCHAR        可变长度字符类型
3、 STRING           动态可变长度字符类型
日期时间类型
4、 DATE              简单日期类型
5、 DATETIME       高精度日期时间类型
6、 INTERVAL        高精度时间类型
数字类型
7、 TINYINT          1字节有符号整型
8、 SMALLINT        2字节有符号整型
9、 INTERGER       4字节有符号整型
10、BIGINT            8字节有符号整型
11、SMALLFLOAT    4字节浮点类型
12、FLOAT             8字节浮点类型
13、DECIMAL         高精度数字类型
14、MONEY            高精度货币格式数字类型
二进制大数据类型
15、BYTE               大数据二进制数据类型
16、TEXT               大数据文本类型
逻辑类型
17、BOOLEAN         布尔类型TRUE/FALSE
LIKE参照数据库字段类型
18、LIKE                表示参照数据库对应字段的类型
(ex:DEFINE  oeb01  LIKE oeb_file.oeb01 #表示oeb01变量类型和oeb_file表中的oeb01字段同类型)
——————————————————————————————————————————————
1、 CHAR              固定长度字符类型
语法 CHAR[(size)]  或 CHARACTER[(size)]
①CHAR与CHARACTER是同义词
②size指定几个字节长度,最大65534;如果不指定size则默认为1
③注意同一个字符在不同的字符编码下占的字符长度是不一样的
④CHAR赋值后如果长度不足size,则以空字符补到固定的字符size长度,但是任何字符比较都是去掉空字符后缀后才比较的(即”abc”=”abc   “)
——————————————————————————————————————————————
2、 VARCHAR        可变长度字符类型
语法 CHAR[(size)]  或 CHARACTER[(size)]
①CHAR与CHARACTER是同义词
②size指定几个字节长度,最大65534;如果不指定size则默认为1
③注意同一个字符在不同的字符编码下占的字符长度是不一样的
④CHAR赋值后面size不够,则以空字符补到固定的字符size长度,但是任何字符比较都是去掉空字符后缀后才比较的(“abc”=”abc   “)

#CHAR & VARCHAR 应用demo:   
MAIN  
    DEFINE l_char       CHAR            #不指定长度时,默认为1个长度   
    DEFINE l_char20     CHAR(20)  
    DEFINE l_varchar    VARCHAR         #不指定长度时,默认为1个长度   
    DEFINE l_varchar20  VARCHAR(20)  
  
    DEFINE l_char10_A   CHAR(10)  
    DEFINE l_char10_A_  CHAR(10)  
   
     #CHAR & VARCHAR 超过指定的size长度   
     LET l_char    = 'ABCDEFG'  
     LET l_varchar = 'ABCDEFG'  
     DISPLAY '[l_char    = ',l_char,']'      #值超出size指定的长度时,值被截断   
     DISPLAY '[l_varchar = ',l_varchar,']'  
   
     IF l_char    IS NULL THEN DISPLAY 'l_char    IS NULL' ELSE DISPLAY 'l_char    NOT NULL' END IF  
     IF l_varchar IS NULL THEN DISPLAY 'l_varchar IS NULL' ELSE DISPLAY 'l_varchar NOT NULL' END IF  
   
     IF l_char = l_varchar THEN  
        DISPLAY 'l_char = l_varchar : equals'  
     ELSE  
        DISPLAY 'l_char = l_varchar : not equals'   
     END IF  
   
     #CHAR赋值后面size不够,则以空字符补到固定的字符size长度,但是任何字符比较都是去掉空字符后缀后才比较的("abc"="abc   ")   
     LET l_char10_A  = 'A'  
     LET l_char10_A_ = 'A   '  
     DISPLAY '[',l_char10_A ,']'  
     DISPLAY '[',l_char10_A_,']'  
     IF l_char10_A = l_char10_A_ THEN  
        DISPLAY 'l_char10_A = l_char10_A_ : equals'  
     ELSE  
        DISPLAY 'l_char10_A = l_char10_A_ : not equals'  
     END IF  
   
     #CHAR & VARCHAR 不赋值,直接使用时为NULL   
     DISPLAY '[l_char20 = ',l_char20,']'  
     DISPLAY '[l_varchar20 = ',l_varchar20,']'  
     IF l_char20    IS NULL THEN DISPLAY 'l_char20    IS NULL' ELSE DISPLAY 'l_char20    NOT NULL' END IF  
     IF l_varchar20 IS NULL THEN DISPLAY 'l_varchar20 IS NULL' ELSE DISPLAY 'l_varchar20 NOT NULL' END IF     
 END MAIN  

 

输出结果:

[l_char    = A]  
[l_varchar = A]  
l_char    NOT NULL  
l_varchar NOT NULL  
l_char = l_varchar : equals  
[A         ]  
[A         ]  
l_char10_A = l_char10_A_ : equals  
[l_char20 =                     ]  
 [l_varchar20 =  ]  
 l_char20    IS NULL  
 l_varchar20 IS NULL  
 #请注意,输出占位符和值的关系   
 #比如char(20):即使值为NULL时,display显示时也要占20个字符的空间   
 # varchar(20):因为是可变长度字符,值为NULL时,display显示时占1个字符的空间  

 

——————————————————————————————————————————————
3、 STRING           字符串
语法 STRING
STRING的方法
append( str STRING ) RETURNING STRING                  在原字符串后面添加str,然后返回一个新的字符串
equals( src STRING ) RETURNING INTEGER                      比较原字符串和src,内容是否相等;【字符串首尾空白都必须一样多】
如果原字符串or src有1个字符串为NULL,则返回NULL
equalsIgnoreCase( src STRING )  RETURNING INTEGER         功能同上,但是忽略字符的大小写
getCharAt( pos INTEGER ) RETURNING STRING                  返回在原字符串中,指定位置pos的字符;【注:位置从1开始计数】
如果指定的位置pos超出了原字符串的长度则返回NULL
getIndexOf( str STRING, spos INTEGER ) RETURNING INTEGER 返回在原字符串中,从指定位置spos开始,首次出现str字符串的索引位置;【注:位置从1开始计数】
如果未检索到,则返回0;如果原字符串是NULL,则返回-1
getLength( ) RETURNING INTEGER                                 返回原字符串的长度;【注:首尾空白字符也计数】
subString( spos INTEGER, epos INTEGER ) RETURNING STRING 返回在原字符串中,从指定位置spos开始到指定位置epos结束的子串
如果原字符串是NULL,或者指定的位置超出原字符串的长度则都返回NULL
toLowerCase( ) RETURNING STRING                                将原字符串全部小写,     如果原字符串是NULL,则返回NULL
toUpperCase( ) RETURNING STRING                                将原字符串全部大写,     如果原字符串是NULL,则返回NULL
trim( ) RETURNING STRING                                       去掉原字符串首尾空格,如果原字符串是NULL,则返回NULL
trimLeft( ) RETURNING STRING                                   去掉原字符串首  空格,如果原字符串是NULL,则返回NULL
trimRight( ) RETURNING STRING                                  去掉原字符串  尾空格,如果原字符串是NULL,则返回NULL

#STRING应用demo:   
MAIN  
    DEFINE l_string         STRING  
  
    DEFINE l_blank          STRING  
    DEFINE l_blankTrim      STRING  
    DEFINE l_blankCLIPPED   STRING  
    DEFINE l_varcharCLIPPED VARCHAR(20)  
    DEFINE l_varcharTrim    VARCHAR(20)  
   
     DEFINE l_stringBlank    STRING  
     DEFINE l_stringKnalb    STRING  
   
     #CHAR & VARCHAR & STRING 字符比较时,末尾有空白字符时一律忽略   
     LET l_stringBlank = 'ABCDEFG   '  
     LET l_stringKnalb = 'ABCDEFG'  
     IF l_stringBlank == l_stringKnalb THEN  
         DISPLAY 'l_stringBlank = l_stringKnalb : equals'        #√   
     ELSE  
         DISPLAY 'l_stringBlank = l_stringKnalb : not equals'  
     END IF  
   
     #STRING 空白字符串,trim() 或 CLIPPED 去掉空白字符后,不是NULL 而 是空串   
      ##VS##   
     #CHAR VARCHAR 空白字符串,    CLIPPED 去掉空白字符后, 是NULL 而不是空串   
     LET l_blank = '        '  
     LET l_blankTrim      = l_blank.trim()  #trim() :只针对string字符串才有的方法。 trim()      去掉 前面及末尾的空格   
     LET l_blankCLIPPED   = l_blank CLIPPED #                                   trimLeft() 仅去掉 前面的空格    
     LET l_varcharTrim    = l_blank.trim()  #                                   trimRight()仅去掉 末尾的空格   
     LET l_varcharCLIPPED = l_blank CLIPPED #CLIPPED:对STRING、CHAR、VARCHAR都可以操作,      仅去掉 末尾的空格   
     IF l_blankTrim      IS NULL THEN DISPLAY 'l_blankTrim      IS NULL' ELSE DISPLAY 'l_blankTrim      NOT NULL' END IF  
     IF l_blankCLIPPED   IS NULL THEN DISPLAY 'l_blankCLIPPED   IS NULL' ELSE DISPLAY 'l_blankCLIPPED   NOT NULL' END IF  
     IF l_varcharTrim    IS NULL THEN DISPLAY 'l_varcharTrim    IS NULL' ELSE DISPLAY 'l_varcharTrim    NOT NULL' END IF  
     IF l_varcharCLIPPED IS NULL THEN DISPLAY 'l_varcharCLIPPED IS NULL' ELSE DISPLAY 'l_varcharCLIPPED NOT NULL' END IF  
   
     #STRING的各种方法应用示例:   
     LET l_string = '     ABCDEFG   '    #注:前面5个空格,后面3个空格,总长度为15个字符   
     #append():尾部添加   
     DISPLAY '[     ABCDEFG   ] append [HIJKLMN]       [:',l_string.append('HIJKLMN'),']'  
     #equals()、equalsIgnoreCase():判断相等   
     DISPLAY '[     ABCDEFG   ] equals [BCD]            :',l_string.equals('BCD')             #×   
     DISPLAY '[     ABCDEFG   ] equals [ABCDEFG]        :',l_string.equals('ABCDEFG')         #×   
     DISPLAY '[     ABCDEFG   ] equals [     ABCDEFG ]  :',l_string.equals('     ABCDEFG ')   #× ,区别于=比较,=号字符后面的空白字符忽略   
     DISPLAY '[     ABCDEFG   ] equals [     ABCDEFG   ]:',l_string.equals('     ABCDEFG   ') #√   
     DISPLAY '[     ABCDEFG   ] equalsIgnoreCase [aBcD]           :',l_string.equalsIgnoreCase('aBcD')            #×   
     DISPLAY '[     ABCDEFG   ] equalsIgnoreCase [     ABcDEFg   ]:',l_string.equalsIgnoreCase('     ABcDEFg   ') #√   
     #getLength():取字串长度   
     DISPLAY '[     ABCDEFG   ] length:',l_string.getLength()  
     #getCharAt():索引指定位置字符   
     DISPLAY '[     ABCDEFG   ] CharAt( 8):[',l_string.getCharAt(8),']'  
     DISPLAY '[     ABCDEFG   ] CharAt(16):[',l_string.getCharAt(16),']'     #索引位置超出原字符串长度时返回null   
     #getIndexOf():搜索子串的位置   
     DISPLAY '[     ABCDEFG   ] IndexOf(ABC):',l_string.getIndexOf('ABC',5)  
     DISPLAY '[     ABCDEFG   ] IndexOf(AC) :',l_string.getIndexOf('AC',1)  
     DISPLAY '[     ABCDEFG   ] IndexOf(AC) :',l_string.getIndexOf('ABC',16) #索引位置超出原字符串长度时返回null   
     #toLowerCase()、DOWNSHIFT():全部转小写、toUpperCase()、UPSHIFT():全部转大写   
     DISPLAY '[     ABCDEFG   ] toLowerCase :[',l_string.toLowerCase(),']'  
     DISPLAY '[     ABCDEFG   ] DOWNSHIFT   :[',DOWNSHIFT(l_string),']'    #DOWNSHIFT()、UPSHIFT()  对string、char、varchar都可以操作   
     DISPLAY '[     ABCDEFG   ] toUpperCase :[',l_string.toUpperCase(),']'  
     DISPLAY '[     ABCDEFG   ] UPSHIFT     :[',UPSHIFT(l_string),']'  
     #trim():去掉首尾空格、trimLeft():仅去掉首空格、trimRight():仅去掉末尾的空格   
     DISPLAY '[     ABCDEFG   ] trim()     :[',l_string.trim(),']'  
     DISPLAY '[     ABCDEFG   ] trimLeft() :[',l_string.trimLeft(),']'  
     DISPLAY '[     ABCDEFG   ] trimRight():[',l_string.trimRight(),']'  
     #subString:截取子字符串   
     DISPLAY '[     ABCDEFG   ] subString():[',l_string.subString(7,10),']'  
     DISPLAY '[     ABCDEFG   ] subString():[',l_string.subString(7,16),']'  #索引位置超出原字符串长度时返回null   
     LET l_varchar = l_string  
    #DISPLAY '[     ABCDEFG   ] [截取,字符]:[',l_string[7,10],']'       #这里是错误的语法,[]截取字符串只适合CHAR & VARCHAR操作   
     DISPLAY '[     ABCDEFG   ] [截取,字符]:[',l_varchar[7,10],']'  
 END MAIN

 

输出结果:

l_stringBlank = l_stringKnalb : equals  
l_blankTrim      NOT NULL  
l_blankCLIPPED   NOT NULL  
l_varcharTrim    IS NULL  
l_varcharCLIPPED IS NULL  
[     ABCDEFG   ] append [HIJKLMN]       [:     ABCDEFG   HIJKLMN]  
[     ABCDEFG   ] equals [BCD]            :          0  
[     ABCDEFG   ] equals [ABCDEFG]        :          0  
[     ABCDEFG   ] equals [     ABCDEFG ]  :          0  
[     ABCDEFG   ] equals [     ABCDEFG   ]:          1  
[     ABCDEFG   ] equalsIgnoreCase [aBcD]           :          0  
[     ABCDEFG   ] equalsIgnoreCase [     ABcDEFg   ]:          1  
[     ABCDEFG   ] length:         15  
[     ABCDEFG   ] CharAt( 8):[C]  
[     ABCDEFG   ] CharAt(16):[]  
[     ABCDEFG   ] IndexOf(ABC):          6  
[     ABCDEFG   ] IndexOf(AC) :          0  
[     ABCDEFG   ] IndexOf(AC) :          0  
[     ABCDEFG   ] toLowerCase :[     abcdefg   ]  
[     ABCDEFG   ] DOWNSHIFT   :[     abcdefg   ]  
[     ABCDEFG   ] toUpperCase :[     ABCDEFG   ]  
[     ABCDEFG   ] UPSHIFT     :[     ABCDEFG   ]  
[     ABCDEFG   ] trim()     :[ABCDEFG]  
[     ABCDEFG   ] trimLeft() :[ABCDEFG   ]  
[     ABCDEFG   ] trimRight():[     ABCDEFG]  
[     ABCDEFG   ] subString():[BCDE]  
[     ABCDEFG   ] subString():[]  
[     ABCDEFG   ] [截取,字符]:[BCDE]  

 

——————————————————————————————————————————————
4、 DATE           日期
语法 DATE
①基于4byte的整数范围0001-01-1(-693594)到9999-12-31(2958464)
②有效日期范围为1899/12/31到9999/12/31,默认值为1899/12/31
——————————————————————————————————————————————
5、 DATETIME   日期时间
语法 DATETIME qua11  TO  qua12
qua11可取值 YEAR、MONTH、DAY、HOUR、MINUTE、SECOND、FRACTION
qua12可取值 YEAR、MONTH、DAY、HOUR、MINUTE、SECOND、FRACTION、FRACTION(1)、FRACTION(2)、FRACTION(3)、FRACTION(4)、FRACTION(5)
——————————————————————————————————————————————
6、 INTERVAL   日期时间

#DATE & DATETIME 应用demo:   
MAIN  
    DEFINE l_date       DATE  
    DEFINE l_dateBegin  DATE  
    DEFINE l_dateEnd    DATE  
  
    DEFINE l_datetime1          DATETIME YEAR TO MINUTE #精确到分钟   
    DEFINE l_datetime2          DATETIME YEAR TO MINUTE  
    DEFINE l_datetimeBegin      DATETIME YEAR TO SECOND #精确到秒   
     DEFINE l_datetimeEnd        DATETIME YEAR TO SECOND  
   
     #日期赋值   
     LET l_date      = TODAY         #当前日   
     LET l_dateEnd   = CURRENT       #当前日期、时间;这里只取CURRENT的日期部分   
     LET l_dateBegin = '2013-10-31'  #√,用字符串赋值   
     LET l_dateBegin = '2013/10/31'  #√,   
     LET l_dateBegin = '13/10/31'    #√,这样也是可以的,但是比较模糊,表示为能匹配到**13最近的年份;这里表示2013,而不是1913   
    #LET l_dateBegin = '2131031'     #×,此表达方式不能正常转换为日期   
   
     #日期运算   
     DISPLAY 'l_date:',l_date  
     DISPLAY 'l_dateEnd:',l_dateEnd  
     DISPLAY 'l_dateBegin:',l_dateBegin  
     DISPLAY 'BeginDate ~ EndDate 天数:',l_dateEnd - l_dateBegin   #两日期相减,直接得到两日期相距的天数   
     DISPLAY '两天后:',l_date + 2                                   #+-天数,直接得到+-天数后的日期     
   
     #日期时间赋值   
     LET l_datetime1     = TODAY                     #TODAY是日期,仅能取到日,后面的时间都是00:00:00   
     LET l_datetime2     = CURRENT YEAR TO MINUTE    #CURRENT 到MINUTE 分钟   
     LET l_datetimeEnd   = CURRENT YEAR TO SECOND    #CURRENT 到SECOND 秒   
     LET l_datetimeBegin = '2015-03-10 14:30:30'  
   
     #日期时间运算   
     DISPLAY 'l_datetime1:',l_datetime1  
     DISPLAY 'l_datetime2:',l_datetime2  
     DISPLAY 'l_datetimeEnd:',l_datetimeEnd  
     DISPLAY 'l_datetimeBegin:',l_datetimeBegin  
     DISPLAY 'BeginDateTime ~ EndDateTime 天数 时分秒数:',l_datetimeEnd - l_datetimeBegin   #两日期相减,直接得到两日期相距的天数及时分秒数   
    #DISPLAY '2天10小时10分10秒后:',l_datetimeBegin + '2 10:10:10'     #×,测试日期时间类型不支持该语法     
 END MAIN 

输出结果:

l_date:15/03/10  
l_dateEnd:15/03/10  
l_dateBegin:13/10/31  
BeginDate ~ EndDate 天数:        495  
两天后:15/03/12  
l_datetime1:2015-03-10 00:00  
l_datetime2:2015-03-10 15:05  
l_datetimeEnd:2015-03-10 15:05:05  
l_datetimeBegin:2015-03-10 14:30:30  
BeginDateTime ~ EndDateTime 天数 时分秒数:        0 00:34:35  

转载请注明:赫非域 » BDL-FGL_BASE 数据类型(2)