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が戻ります。