IsValidシリーズ
1、IsValid:do not log warnings
形式:IsValid(type, test_string[, format])
output:int(8)
Eg(实际应用):allow blank
(IsValid ("int32",Trim(linkname.col_name)) or Trim(linkname.col_name) = "")
(IsValid ("date", linkname.ABC_DATE[1,4]:"-":linkname.ABC_DATE[5,2]:"-":linkname.ABC_DATE[7,2]) or Trim(linkname.ABC_DATE) = "") ※ABC_DATE char(8) eg. 20180101
(IsValid ("time", linkname.ABC_TIME[1,2]:":":linkname.ABC_TIME[4,2]:":":linkname.ABC_TIME[7,2]) or Trim(linkname.ABC_TIME) = "") ※ABC_TIME char(8) eg. 20:01:01
(IsValid ("decimal[15,0]",linkname.ABC_PRICE) or Trim(linkname.ABC_PRICE) = "") ※出力側がDecimal(15,0)
dfloat 浮動小数点数の仮数(mantissa)のこと.形式 A*BC Aが仮数。Bが基数。Cが指数(exponent)。DecimalToDFloatで試せる。
sfloat 通常のfloat?
raw
- bitmapの形式。
- RawLength(test_raw)はバイトを返す。
- 例RawToString raw { 0x31 0x31 0x30 0x35 0x32 0x32 0x30 0x39 } → String "11052209"
- StringToRawは相対関数
2、IsValidDate:log warnings
和日期分割符没关系,只和YYYY,MM,DD是否有效有关系
3、IsValidDecimal
形式:IsValidDecimal(testvalue(decimal), allzeroflg(uint8)),default allzeroflg is 0 means all-zero is not valid。
Eg IsValidDecimal(0000.0,0) is 1(TRUE). ---> why?
4、IsValidTime
5、IsValidTimestamp
Question: かきの4つがすべてが戻り値1です。(TRUE)なぜ?
1. IsValid("int64", 12.34)
2. IsValid("decimal[8,3]", 12.3456)
3. IsValid("date", 2016-04-27a)
4. IsValid("date", 2016-04-270000)
Answer:
1. 内部でint64への変換がエラーなく行われるため、1が戻ります。int32等を指定した場合も同じです。
2. 少数部分の3桁への切捨てが行われて(不会四舍五入)動作するため、1が戻ります。
IsValid("decimal[8,3]", 123456.78) は0が戻ります。これは整数部分が6桁あり、指定の5桁(8-3)に入らないためです。
DDL:
-----------------------------------------------------------------------------
create table USER1.BB1 (
A VARCHAR(1) not null
, B DECIMAL(8, 3)
);
insert into USER1.BB1 values('3',12345.123567);
-----------------------------------------------------------------------------
3/4. データの最後の部分が切捨てられ、YYYY-MM-DD で正しい結果となるので、1が戻ります。
IsValid("date", 2016-04-2a) は、YYYY-MM-DD としたときに正しい結果となりませんので、0が戻ります。