input设置了number还是可以输入符号e

input设置了number还是可以输入符号e,第1张

因为符号和e也代表数字,如果想要完全控制住还要写正则,但是如果设置了number类型,输入1-、1e等的时候,例如vue,绑定v-model="value" 这个时候绑定不上,只能通过设置类型为text,正则判断只能输入数字,校验。

数据库表中有一个varchar2类型的字段,里边可能包含数字或用逗号分隔的数据,如3或4,5这样的值,查询时,只传入了一个数字,也就是不带逗号的参数。因此sql语句类似这样:

select * from ct where nos = 3

语句本身一看就知道会出问题,因为3没加引号,会被当作数字处理。这样就肯定会报ORA-01722: invalid number的错误:

SQL Error: 1722, SQLState: 42000

ORA-01722: invalid number

但在用hibernate时,为了避免数字问题,我们经常会这样写hsql语句:

String sql = 'select * from ctEntity as ct where ct.Nos = ''+no+'''

当传入参数no为‘4,5’时,可能不会报错,但当no为'4'或'5'时,也就是单个数字时,就会报错了。经过打印hibernate的语句,发现单个数字时,hibernate会把上述语句转义成这样:

select ct.Nos from ctEntity as ct where ct.Nos=4

也就是会忽略掉引号,这样数据库就会报错,因为varchar2类型的nos字段在查询时给转义成了数字,所以肯定报错了。

这种情况下,hsql语句就不能用 ct.Nos = ' ***'这样的写法,必须用like,如ct.Nos like '%no%',这样才不会报错。当然完整的查询语句要考虑逗号的前、后以及没有逗号的情况,那就自己考虑了。

1、xxx.txt

文本内容:

XXXXXXXXXXXX XXXXX XXXXXXXXX X X X X XXXX

XXXXXXXXXXXX XXXXX XXXXXXXXX X X X X XXXX

2、XXX.ctl

....................................

INTO TABLE XXX_XXX_XXX -- 要插入记录的表

Fields terminated by ' ' -- 数据中每行记录用 空格 分隔

trailing nullcols --表的字段没有对应的值时允许为空

(

REQUEST_ID,

REQUEST_TIME DATE 'YYYYMMDDHH24MISS',

REQUEST_SOURCE INTEGER EXTERNAL ,

BUSINESS_TYPE INTEGER EXTERNAL ,

PAY_TYPE INTEGER EXTERNAL ,

CARD_WHOLECOUNT INTEGER EXTERNAL,

CARD_WHOLEVALUE INTEGER EXTERNAL,

PAY_AMOUNT INTEGER EXTERNAL

)

3、利用sqlloader导入会出现ORA-01722:invalid number问题;

原因:换行符的存在,如果integer或者number类型的栏位位于表的最后,最后其实会有CR/LF的换行符,在用sqlldr导入时会把换行符也算作那个数字的一部分,使得对应的导入PAY_AMOUNT 的值与PAY_AMOUNT在数据库中定义的NUMBE R(8)类型不匹配,从而出错。解决办法加integer或者加“TERMINATED BY WHITESPACE”。

即:

trailing nullcols --表的字段没有对应的值时允许为空

(

REQUEST_ID,

REQUEST_TIME DATE 'YYYYMMDDHH24MISS',

REQUEST_SOURCE INTEGER EXTERNAL ,

BUSINESS_TYPE INTEGER EXTERNAL ,

PAY_TYPE INTEGER EXTERNAL ,

CARD_WHOLECOUNT INTEGER EXTERNAL,

CARD_WHOLEVALUE INTEGER EXTERNAL,

PAY_AMOUNT INTEGER EXTERNAL TERMINATED BY WHITESPACE

)

注:在实际工程项目中,其实要导入9个字段,最后一个字段为导入时间,于是相应的在数据库中创表时,默认导入时间值为SYSDATE

IMPORT_DATE DATE DEFAULT SYSDATE

在数据库里面查出来的数据返回给前端的时候,发现了一个问题,返回的数据中带有e。

这条结果的sql中用sum函数做了一个求和的运算,

虽然sum函数返回的类型是double的,但是和E也没有什么关系吧,最后的解决办法。

new DecimalFormat(“0”).format(hlw)

格式化以后回归正常。


欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/sjk/9949697.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-05-03
下一篇2023-05-03

发表评论

登录后才能评论

评论列表(0条)

    保存