mysql 数据类型转换的实现

一、问题

有一张如下图所示的表,需要我们查出 result 值大于 reference_high值的数据

然后我们写了下面的SQL查询语句

SELECT i.result,i.reference_high FROM report_item i
LEFT JOIN report r ON r.id=i.report_id
WHERE r.org_id=54 AND r.report_status=1
AND r.add_date BETWEEN '2020-12-01' AND '2020-12-28'
AND i.reference_high<>'' AND i.result<>''
AND i.result > i.reference_high ;

然后执行查看结果

查询结果并不如我们预期的那样,存在大量的数据不满足 i.result > i.reference_high 的查询条件

二、定位

查看建表SQL语句,我们发现 result 和 reference_high 是varchar类型,并不是数值类型,所以出现了查询结果与预期不符的情况

三、解决

方式一:修改表字段数据类型为数值型

但是考虑业务使用场景,两个字段都是有可能会出现非数值类型的输入,所以不可行

方式二:修改查询语句,将数据类型转换为数值型

以 以上数据示例

1、隐式转换:将需要比较的字符串加0之后再比较,数据被成功过滤

2、显示转换

(1)使用convert函数:将字符串转换为浮点数,再进行比较,数据被成功过滤

(2)使用cast函数:与convert函数几乎一样

到此这篇关于mysql 数据类型转换的实现的文章就介绍到这了,更多相关mysql 数据类型转换内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • MySQL 数据类型 大全

    复制代码 代码如下: 其中的长度以字节为单位 名称 长度 用法 TINYINT(M) BIT,BOOL,BOOLEAN 1 如果为无符号数,可以存储从0到255的数; 否则可以存储从-128到127的数. SMALLINT(M) 2 如果为无符号数,可以存储从0到65535的数; 否则可以存储从-32768到32767的数. MEDIUMINT(M) 3 如果为无符号数,可以存储从0到16777215的数;否则可以存储从-8388608到8388607的数 INT(M) INTEGER(M) 4

  • MySQL 数据类型 详解

    1.整型 MySQL数据类型 含义(有符号) tinyint(m) 1个字节 范围(-128~127) smallint(m) 2个字节 范围(-32768~32767) mediumint(m) 3个字节 范围(-8388608~8388607) int(m) 4个字节 范围(-2147483648~2147483647) bigint(m) 8个字节 范围(+-9.22*10的18次方) 取值范围如果加了unsigned,则最大值翻倍,如tinyint unsigned的取值范围为(0~25

  • MySQL日期数据类型、时间类型使用总结

    MySQL 日期类型:日期格式.所占存储空间.日期范围 比较. 日期类型        存储空间       日期格式                 日期范围 ------------ ---------   --------------------- ----------------------------------------- datetime       8 bytes   YYYY-MM-DD HH:MM:SS   1000-01-01 00:00:00 ~ 9999-12-31

  • MySQL数据类型varchar详解

    1.varchar(N)的逻辑意义从MySQL4.1开始,varchar (N)中的N指的是该字段最多能存储多少个字符(characters),不是字节数.不管是一个中英文字符或者数字.或者一个汉字,都当做一个字符.在4.1之前,N表示的是最大存储的字节数(bytes).2.varchar(N)到底能存多长的数据在mysql reference manual上,varchar最多能存储65535个字节的数据.varchar 的最大长度受限于最大行长度(max row size,65535byte

  • 深入了解mysql的4种常用、重要的数据类型

    为了实现这一目标,它需要我们在数据库系统的常用数据类型有充分的认识. 下面我们来看一下mysql的重要数据类型 1.数值类型可以划分为数值类型:整型,浮点十进制类型. 所谓的"十进制"是指decimal和numeric,他们是同一类型的.严格地说,它不是一个数字类型,因为他们实际上是作为字符串存储,每一个数字值(包括小数点)占一个字节的存储空间,所以这种类型的消耗大量的存储空间,但它的优点是它的价值不会失去做浮点数计算精度,它更适合一些计算精度要求高,如价格计算.浮动取决于不同精度的类

  • mysql 数据类型TIMESTAMP

    在mysql中timestamp数据类型是一个比较特殊的数据类型,他可以自动在你不使用程序更新情况下只要你更新了记录timestamp会自动更新时间 通常表中会有一个Create date 创建日期的字段,其它数据库均有默认值的选项.MySQL也有默认值timestamp,但在MySQL中,不仅是插入就算是修改也会更新timestamp的值! 这样一来,就不是创建日期了,当作更新日期来使用比较好! 因此在MySQL中要记录创建日期还得使用datetime 然后使用NOW() 函数完成! 1: 如

  • Java数据类型与MySql数据类型对照表

    本文讲述了Java数据类型与MySql数据类型对照表.分享给大家供大家参考,具体如下: 类型名称 显示长度 数据库类型 JAVA类型 JDBC类型索引(int) VARCHAR L+N VARCHAR java.lang.String 12 CHAR N CHAR java.lang.String 1 BLOB L+N BLOB java.lang.byte[] -4 TEXT 65535 VARCHAR java.lang.String -1 INTEGER 4 INTEGER UNSIGNE

  • MySQL数据类型和常用字段属性总结

    前言 好比C++中,定义int类型需要多少字节,定义double类型需要多少字节一样,MySQL对表每个列中的数据也会实行严格控制,这是数据驱动应用程序成功的关键.M前言 好比C++中,定义int类型需要多少字节,定义double类型需要多少字节一样,MySQL对表每个列中的数据也会实行严格控制,这是数据驱动应用程序成功的关键.MySQL提供了一组可以赋给表中各个列的数据类型,每个类型都强制数据满足为该数据类型预先确定的一组规则,例如大小.类型及格式. 这里先总结数据类型.MySQL中的数据类型

  • mysql 数据类型转换的实现

    一.问题 有一张如下图所示的表,需要我们查出 result 值大于 reference_high值的数据 然后我们写了下面的SQL查询语句 SELECT i.result,i.reference_high FROM report_item i LEFT JOIN report r ON r.id=i.report_id WHERE r.org_id=54 AND r.report_status=1 AND r.add_date BETWEEN '2020-12-01' AND '2020-12-

  • mysql decimal数据类型转换的实现

    最近在工作遇到数据库中存的数据类型是: decimal(14,4) 遇到的问题是: 当我使用python 读取到内存中时,总是带着 decimal字符, 再写入其它mysql表中时,数据类型为int型,导致数据入库不成功. import pymysql # 创建数据库连接 con = pymysql.connect() sql = '''select created_time from schma.table LIMIT 10''' try: cur = con.cursor(cursor=py

  • 适合新手的mysql日期类型转换实例教程

    目录 1.使用cast() 和 convert() 函数实现日期格式的转换 2.使用date_format()函数实现日期格式的转换 示例1:时间类型转换成字符串类型 示例2:从学生表 ‘student’ 中查询前2人现在的年龄. 3.使用str_to_date()函数实现字符串类型转换日期类型 总结 1.使用cast() 和 convert() 函数实现日期格式的转换 语法格式: convert( 表达式,数据类型 ) cast( 表达式 as 数据类型 ) 可转换的类型有 字符串char.日

  • mysql数据存储过程参数实例详解

    MySQL 存储过程参数有三种类型:in.out.inout.它们各有什么作用和特点呢? 一.MySQL 存储过程参数(in) MySQL 存储过程 "in" 参数:跟 C 语言的函数参数的值传递类似, MySQL 存储过程内部可能会修改此参数,但对 in 类型参数的修改,对调用者(caller)来说是不可见的(not visible). drop procedure if exists pr_param_in; create procedure pr_param_in ( in id

  • 史上最简单的MySQL数据备份与还原教程(上)(三十五)

    数据备份与还原第一篇分享给大家,具体内容如下 基础概念: 备份,将当前已有的数据或记录另存一份: 还原,将数据恢复到备份时的状态. 为什么要进行数据的备份与还原? 防止数据丢失: 保护数据记录. 数据备份与还原的方式有很多种,具体可以分为:数据表备份.单表数据备份.SQL备份和增量备份. 数据表备份 数据表备份,不需要通过 SQL 来备份,我们可以直接进入到数据库文件夹复制对应的表结构以及数据:在需要还原数据的时候,直接将备份(复制)的内容放回去即可. 不过想要进行数据表备份是有前提条件的,因为

  • MySQL数据文件存储位置的查看方法

    我们可能会有一个疑惑,那就是:当我们在本地(自己的电脑)安装完 MySQL 之后,也创建了很多的数据库啊.表啊,也存储了很多的数据啊,但是这些内容都存储到哪里了呢?特别是,当我们需要直接操作这些数据文件的时候,翻遍了整个电脑,却找不到 MySQL 的数据文件到底在哪里,这就有些坑爹啦! 在这里,教给大家一个非常简单的能够立即定位到 MySQL 数据文件的存储位置方法,即在 MySQL 客户端键入如下命令: show global variables like "%datadir%";

  • PHP通过插入mysql数据来实现多机互锁实例

    本文实例讲述了PHP通过插入mysql数据来实现多机互锁的方法,分享给大家供大家参考.具体实现方法如下: 在执行流程之前可以加一般锁,shell枷锁函数如下,如果成功则会返回0,否则返回非0值: 复制代码 代码如下: function get_lock() {     local dataId="${1}"     local dataDate="${2}" local sql="insert intot_trans_lock     (dataId, d

  • Mysql数据表分区技术PARTITION浅析

    在这一章节里, 我们来了解下 Mysql 中的分区技术 (RANGE, LIST, HASH)   Mysql 的分区技术与水平分表有点类似, 但是它是在逻辑层进行的水平分表, 对于应用而言它还是一张表, 换句话说: 分区不是实际真正的对一张表进行拆分,分区之后表还是一个表,它是把存储文件进行拆分. 在 Mysql 5.1(后) 有了几种分区类型:   RANGE分区: 基于属于一个给定连续区间的列值, 把多行分配给分区 LIST分区: 类似于按 RANGE 分区, 区别在于 LIST 分区是基

  • JAVA中string数据类型转换详解

    在JAVA中string是final类,提供字符串不可以修改,string类型在项目中经常使用,下面给大家介绍比较常用的string数据类型转换: String数据类型转换成long.int.double.float.boolean.char等七种数据类型 复制代码 代码如下: * 数据类型转换 * @author Administrator * */ public class 数据类型转换 { public static void main(String[] args) { String c=

  • java使用jdbc连接数据库工具类和jdbc连接mysql数据示例

    这个工具类使用简单,实例化直接调用就可以了,大家还可以方便的根据自己的需要在里面增加自己的功能 复制代码 代码如下: package com.lanp.ajax.db; import java.sql.Connection;import java.sql.DriverManager;import java.sql.PreparedStatement;import java.sql.ResultSet;import java.sql.SQLException; /** * 连接数据库的工具类,被定

随机推荐