精华内容
下载资源
问答
  • 这个条件从前端传到后端的类型为string,并且这个字段在oracle数据库里为varchar类型数据库中这个字段的值存放的有数字如12.2等,也有汉字如浮动收益等,还有为空等情况。 解决方案 : 我在DAO层的...

    如果你也正在为这种问题头疼,当你看到我这篇博客时,恭喜你,问题的解决方案来了,你头疼的问题可以解决了。

    这个问题是我在最近的项目中遇到的难题,上网查阅了很多资料,用什么平常使用的“<,<=,>,>=”都没能解决问题,最后还是问了大牛,才解决!现在共享给大家。

    先描述下我遇到的问题:

    在项目中,前端要展示一些产品,并有一些查询筛选条件,在收益率这个条件上,出现了这个问题,收益率的筛选条件值有“全部,4-8%,8-11%,11%以上,浮动收益”,这个条件从前端传到后端的类型为string,并且这个字段在oracle数据库里为varchar类型,数据库中这个字段的值存放的有数字如12.2等,也有汉字如浮动收益等,还有为空等情况。


    解决方案

    我在DAO层的Java代码和sql语句中做了改动。

    sql 语句类似如下:(红色的4和10,代表的比较的大小范围,根据自己的情况改动)

    select nvl(ADVANCE_RECEIPT,0from   T_VIP_FUNDINFO   WHERE  REGEXP_LIKE(ADVANCE_RECEIPT,'^[0-9]'and nvl(ADVANCE_RECEIPT,0)>4 and nvl(ADVANCE_RECEIPT,0)<10;

    由于前端传来的数据是String类型的,所以需要对数据进行类型转换为整数Integer.valueOf()即可。

    下面贴出我DAO层的Java代码:

    if (StringHelper.isNotEmpty(advance_receipt)) //预期收益
    {
    if (advance_receipt.indexOf("-") != -1)
    {
    String[] tls = advance_receipt.split("-");
    if (tls != null && tls.length >= 1)
    {
    if (tls.length >= 2)
    {
    sql.append("AND REGEXP_LIKE(V.ADVANCE_RECEIPT,'^[0-9]') AND   nvl(V.ADVANCE_RECEIPT,0) >= ? AND nvl(v.ADVANCE_RECEIPT,0) < ?");
    param.add(Integer.valueOf(tls[0]));
    param.add(Integer.valueOf(tls[1]));
    }
    else
    {
    sql.append("AND REGEXP_LIKE(V.ADVANCE_RECEIPT,'^[0-9]') and   nvl(V.ADVANCE_RECEIPT,0)>=? ");
    param.add(Integer.valueOf(tls[0]));
    }
    }
    else
    {
    sql.append(" AND V.ADVANCE_RECEIPT = ? ");
    param.add(advance_receipt);
    }
    }
    else
    {
    sql.append(" AND V.ADVANCE_RECEIPT = ? ");
    param.add(advance_receipt);
    }
    }
    解决原理:
    看完的人,都应该明白其中的原理:
    第一用到了正则表达式REGEXP_LIKE(V.ADVANCE_RECEIPT,'^[0-9]'),这个表达式的意思此时查询时只查询数字的情况,不会因数据库里存放有汉字而报“无效数字”的异常情况。不会查询汉字的记录。
    第二用到了数值赋值方法nvl(V.ADVANCE_RECEIPT,0) ,这个的用处就是如果值为空就赋值为0

    下面是问题的扩展情况:

    假设在项目中,前端要展示一些产品,并有一些查询筛选条件,在收益率这个条件上,出现了这个问题,收益率的筛选条件值有“全部,4-8%,8-11%,11%以上”,这个条件从前端传到后端的类型为string,并且这个字段在oracle数据库里为varchar类型,数据库中这个字段的值存放的只有数字如12.2等这一种情况。

    此时,要比较的话,就用to_number()来解决。sql语句如:ANDto_number(V.ADVANCE_RECEIPT)>10





    展开全文
  • 今天遇到的一个小问题,数据库中字段类型varchar,但存的是int类型的数字,本以为是按照正常数字比较大小,自信排序,发现出了问题,特此简单记录一下。 字符串类型的数字比较大小是从第一位开始比较其在字符编码...

    前言

    今天遇到的一个小问题,数据库中字段类型是varchar,但存的是int类型的数字,本以为是按照正常数字比较大小,自信排序,发现出了问题,特此简单记录一下。
    在这里插入图片描述
    字符串类型的数字比较大小是从第一位开始比较其在字符编码中对应的数值大小,相等则继续比较第二位,不相等就是数值大的为大。

    转载自:https://blog.csdn.net/qq_42040061/article/details/103501612

    展开全文
  • text varchar 类型比较

    2010-08-04 10:11:00
    sqlserver2005+ 中 1.char和varchar的区别 char 固定长度,非 Unicode 字符数据,长度为 n 个字节。n 的取值范围为 1 至 8,000, varchar [ ( n | max ) ] 可变长度,非 Unicode 字符...数据库两个字段. test1 c...

    sqlserver2005+ 中

    1.char和varchar的区别

    char 固定长度,非 Unicode 字符数据,长度为 n 个字节。n 的取值范围为 1 至 8,000,

    varchar [ ( n | max ) ]  可变长度,非 Unicode 字符数据。n 的取值范围为 1 至 8,000。max 指示最大存储大小是 2^31-1 个字节。

    数据库两个字段. test1 char(10) 'abc' , test2 varchar(10) 'abc'   select datalength(test1) ; 结果是10 char插入数据库的数据字段不够char(10)  其他它会以空格插入,

    select datalength(test2) 结果是3 .插入多少个字符 就占多少位置.

    转载于:https://www.cnblogs.com/ruonanxiao/archive/2010/08/04/1791758.html

    展开全文
  • varchar(n) 长度为 n 个字节的可变长度且非 Unicode 的字符数据。n 必须是一个介于 1 和 8,000 之间的数值。存储大小为输入数据的字节的实际长度,而不是 n 个字节。 nvarchar(n) 包含 n 个字符的可变长度 Unicode ...

    varchar(n) 长度为 n 个字节的可变长度且非 Unicode 的字符数据。n 必须是一个介于 1 和 8,000 之间的数值。存储大小为输入数据的字节的实际长度,而不是 n 个字节。 nvarchar(n) 包含 n 个字符的可变长度 Unicode 字符数据。n 的值必须介于 1 与 4,000 之间。字节的存储大小是所输入字符个数的两倍。 两字段分别有字段值:我和coffee 那么varchar字段占2×2+6=10个字节的存储空间,而nvarchar字段占8×2=16个字节的存储空间。 如字段值只是英文可选择varchar,而字段值存在较多的双字节(中文、韩文等)字符时用nvarchar 上面是一个总结介绍,通过上面的介绍,可以知道。 varchar(4) 可以输入4个字线,也可以输入两个汉字 nvarchar(4) 可以输四个汉字,也可以输4个字母,但最多四个

    引用地址:http://zhidao.baidu.com/question/100397694.html

    转载于:https://www.cnblogs.com/nanideveloper/archive/2012/09/04/2670266.html

    展开全文
  • mysql varchar 比较大小

    2021-03-03 17:41:19
    mysql 数据库表中 定义 time 字段类型varchar(64) 比如存储的数据是 2021-03-03 这个时候,where语句中 time >= '2021-03-03' 这样是可以查询出来的, 但如果是 time >= '2021-03-03 00:00:00' ...
  • 支出表 zhichu 里面 有 总金额 zje 字段,是 varchar类型,存储的时候可以是数字也可以是 包含文字和数字的,如 大约100、200.99、另计等 现在想查询zje 中纯数字的字段来比较大小,总是报错 查询语句如下 ...
  • 数据库中字符串数字怎么比较大小

    千次阅读 2020-09-04 09:48:37
    今天再写mybatis的查询语句时,需要根据起始号码和中止号码对数据信息进行筛选,而传入的号码为字符型数字,数据库中的号码也是varchar类型的,于是就去搜索了一下。 在字段后 +0 最方便
  • 第二是比较的时候Date类型数据库存储的应该是数字吧,可以直接比大小,而Varchar是字符串,得一个个比较,效率低。 DBA认为Varchar类型好的原因是格式固定。 其实我挺不理解的。。。既然Oracle提供了Date来存储...
  • 1. 若查询出来的字段无法比较等问题,查看数据库该字段的类型, 如char(2) 存如0 默认会在0后面加个空格,满足2个字节   -- 用varchar2储存数据,会自动调整大小 2. plsql中能查询表,但是在程序中查询该表...
  • 日期数据在Sql Server数据库中不都是以日期类型...这个方法很容易想到,就是纯粹地利用字符串来比较大小,比如有一个字段为adddate,其数据类型varchar,要比较这个日期是不是大于某个日期,比如"2016-2-22",那么可以
  • char,varchar比较

    2020-03-01 11:09:34
    char类型用于定长字符串,(0-255),如果字符数没有达到定义的位数,汇通空格补全存入数据库中,如果超过指定长度大小,会被截断。 varchar是变长字段(0-65535),如果字符没有达到定义的位数,不会在后面补空格,...
  • 存储大小为输入数据的字节的实际长度,而不是 n 个字节(如varchar(6),当字段为qqq时,数据库实际占用空间为3个字节,而不是6个字节,但只允许存储6个字节,一般中文占两个字节)。 nvarchar(n)
  • 很容易想到,就是纯粹地利用字符串来比较大小,比如有一个字段为vote_time,其数据类型varchar,要比较这个日期是不是大于某个日期,比如"2006-02-23",那么可以直接写: where vote_time>'2006-02-23'
  • sqllite数据库

    2020-04-15 21:15:30
    现有项目需要批量加一减一 数据库需要将varchar类型比较数字类型的大小 1.将xx 列转化为int :cast(ID as int) 2.转化后批量修改就是常规数据库操作了 UPDATE… OR 关键字 WHERE … 完结 ...
  • 数据库MSSQL在比较大小时,出错提示:“将varchar值'24.5'转换为数据类型为int的列时发生语法错!”分析数据库设计列时的类型VARCHAR,当搜索比较语句执行“select*fromdatalistwhereprice>10orderbyid”时即报...

空空如也

空空如也

1 2 3 4
收藏数 73
精华内容 29
关键字:

数据库varchar类型比较大小