在SQL语句中怎样对varchar型别的列进行数值大小的比较

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了在SQL语句中怎样对varchar型别的列进行数值大小的比较相关的知识,希望对你有一定的参考价值。

参考技术A

在SQL语句中怎样对varchar型别的列进行数值大小的比较

在查询里把fl栏位转换成numeric型别,再比较就可以了。
strsql="select fl from mydb where cast(fl as numeric(18,2))>0 and cast(fl as numeric(18,2))<2"

怎么判断一个数值是varchar(32)型别的sql语句

sqlserver中没有函式可以直接判断一个值为vachar型别,但是ISNUMERIC()函式可以判断一个值是否为数字,你可以先判断是否为数字,然后进行转换变成varchar

mysql如何在select语句中对time型别的值进行比较?

SELECT * FROM table WHERE time_to_sec(time)<time_to_sec(\'15:00:00\')

以上为比较方法。

在Oracle系统中,select语句的基本语法格式如下:

select [distinct] [*, column_name [alias], …] from tablename Where conditions group by conditions having order by expressions [ASC/DESC];

查询所有列:

select * from table;

查询指定列:select colum1,colum2 from table;

取消重复行:select distinct deptno,job from emp;

使用表示式:可以在查询列中使用表示式来连线字串(使用 || 连线字串)、改变显示格式(如使用函式to_char)、计算显示的资料(如使用+,-,×,/)等。

举例:
select * from emp;
select ename ,sal,deptno from emp;
select deptno from emp;
select distinct deptno from emp;

怎样在资料库中使用sql语句进行型别的转换

字串和整数日期都可以转换的。
1.当栏位型别为:INT;
2.传入的值为:字串型别;
3.WHERE条件中的整型栏位的传入值用单引号或双引号;
上述描述的前提条件下,会对把传入的 值型别 转换为 栏位定义的资料型别,故WHERE 条件是可以使用到索引的,但从资料库表读出到记忆体块后的值会被 转换为 传入值的资料型别,从而导致ORDER BY无法使用到索引
解释为何ORDER BY ID没有外部排序 或extra的内容为空,那是因为WHERE ID=\'2\' 按主键查询只能查到唯一的一条记录,故不需要排序;
ORDER BY tid 时,WHERE tid=\'2\' 按普通索引去查询的话,能查询到的资料条数会大于1条,加上资料型别隐形转换了,为此需要再额外进行排序和extra部分有内容显示;

SQL语句中怎样比较两个日期的大小?

惯例,在等号左边尽量不要有对栏位的运算,所以一般用法有:
1、判断其是否在某个日期区间:
Where CheckDate Beeen \'2013-01-01\' And \'2013-01-31\'
这个方法也可用于加几天是多少,或减几天是多少:
把起迄日期引数化,原CheckDate要加的,那就变成@BeginDate加,减也同理~
2、判断其是否大于某天:
Where CheckDate >\'2013-01-01\' 或大于等于:Where CheckDate >=\'2013-01-01\'
小于某天
Where CheckDate <\'2013-01-01\' 或小于等于:Where CheckDate <=\'2013-01-01\'
3、判断其是否等于某天:
如果Check栏位不带时间,只是年月日,那直接等于就可以了;
Where CheckDate =\'2013-01-01\'
如果CheckDate栏位是携带时间的就会有差别;这一点,在上述所有方法中都需要注意
eg:CheckDate 实际储存值可能是: 20130101 08:50:54:000 或 20130101 22:50:54:000
这时直接用上面的等号是抓不到的,因此或改写成:
Where CheckDate >= \'2013-01-01\' And CheckDate < \'2013-01-02\'
当然也可以把\'2013-01-01\',定义为引数@Date DateTime
Where CheckDate >= @Date And CheckDate < @Date+1
不建议在等号左边使用函式或计算对表栏位进行计算。
以上是两个日期的判断,另外有些日期处理函式可以了解一下:
DATEDIFF ( datepart , startdate , enddate )
返回指定的 startdate 和 enddate 之间所跨的指定 datepart 边界的计数(带符号的整数)。
eg:
Select DateDiff(DAY,\'20130101\',\'20130105\')
1号到5号相差4天,输出结果为4
常用的datepart 有:
datepart 缩写
year yy, yyyy 年
month mm, m 月
day dd, d 日
week wk, ww 周
hour hh 时
minute mi, n 分
second ss, s 秒
DATEADD(datepart, number, date)
将表示日期或时间间隔的数值与日期中指定的日期部分相加后,返回一个新的 DT_DBTIMESTAMP 值。number 引数的值必须为整数,而 date 引数的取值必须为有效日期。
eg:
Select DATEADD(DAY,1,\'20130101\')
1号加1天就是2号;输出结果为 ‘2013-01-02’
Number可以是负数就变成减几天
DATEADD(datepart, number, date)
将表示日期或时间间隔的数值与日期中指定的日期部分相加后,返回一个新的 DT_DBTIMESTAMP 值。number 引数的值必须为整数,而 date 引数的取值必须为有效日期。
eg:
Select DATEPART(DAY,\'20130101\')
返回datepart描述的部分,输出结果为 1

请教sql语句中,Timestamp型别的资料如何赋值

sqlserver资料库中定义int型别是不需要指定长度的,只有varchar,nvarchar需要指定,boolean是true或者false,date也不需要指定长度,跟int一样,分字首加 *** all,不加,加big,三种情况 你用得什么资料库

sql语句中的timestamp型别

是这样提示的,不能在 timestamp 列中插入非空值。请使用带有列的列表,或 timestamp 列预设值为 NULL 的 INSERT 语句。 加入getdate()没有效果

如何在java里面对Object的型别值进行一个大小的比较

java中 Objiect 类 为所有类的 父类,又称上帝。
java中允许多层继承,这意味着总有一个最高的父类,你是没有手动让他继承其它类的。
而JVM会将所有的未继承其它类的类预设继承了Object类,这表明,只要是类均为Object的子类,换个说法 所有的类都可以使用Object类中的方法,与其他类作比较。只需呼叫方法
equals 即可。注意在这里比较的是地址值。

作者:Tao Li
连结::zhihu./question/36897771/answer/69763955
来源:知乎
著作权归作者所有。商业转载请联络作者获得授权,非商业转载请注明出处。
java中类的比较一般有两种方法,一种就是类本身实现Comparable<T>这个介面,比如通过对使用者的姓名进行比较排序:
package .ailot.pare;
public class User implements Comparable<User>
private String name;
private int age;
private String sex;
public User(String name,int age,String sex)
this.name = name;
this.age = age;
this.sex = sex;

public String getName()
return name;

public void setName(String name)
this.name = name;

public int getAge()
return age;

public void setAge(int age)
this.age = age;

public String getSex()
return sex;

public void setSex(String sex)
this.sex = sex;

@Override
public String toString()
return "User [name=" + name + ", age=" + age + ", sex=" + sex + "]";

@Override
public int pareTo(User u)
TODO Auto-generated method stub
int c = this.name.pareTo(u.name);
if(c==0)
return 0;
else if(c > 0)
return 1;
else
return -1;



Test.java
package .ailot.pare;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.Random;
public class Test
public static void main(String[] args)
List<User> userList = new ArrayList<User>();
for(int i=0;i<10;i++)
int s = new Random().nextInt(20);
User u = new User(s+"张三",i,"男");
userList.add(u);

Collections.sort(userList);
for(User user : userList)
System.out.println(user.toString());



排序的话直接用 Collections.sort( userList ) ;就可以了。
作者:Tao Li
连结::zhihu./question/36897771/answer/69763955
来源:知乎
著作权归作者所有。商业转载请联络作者获得授权,非商业转载请注明出处。
另一种就是类没有实现Comparable<T>这个介面,这就需要自己新建一个比较的类,通过实现Comparator<T>来对类进行比较,还是对User类的姓名进行比较排序:
User.java
package .ailot.pare;
public class User
private String name;
private int age;
private String sex;
public User(String name,int age,String sex)
this.name = name;
this.age = age;
this.sex = sex;

public String getName()
return name;

public void setName(String name)
this.name = name;

public int getAge()
return age;

public void setAge(int age)
this.age = age;

public String getSex()
return sex;

public void setSex(String sex)
this.sex = sex;

@Override
public String toString()
return "User [name=" + name + ", age=" + age + ", sex=" + sex + "]";


UserCompare.java
package .ailot.pare;
import java.util.Comparator;
public class UserCompare implements Comparator<User>
@Override
public int pare(User u1, User u2)
TODO Auto-generated method stub
int c = u1.getName().pareTo(u2.getName());
if(c == 0)
return 0;
else if(c < 0)
return -1;
else
return 1;



Test.java
package .ailot.pare;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.Random;
public class Test
public static void main(String[] args)
List<User> userList = new ArrayList<User>();
for(int i=0;i<10;i++)
int s = new Random().nextInt(20);
User u = new User(s+"张三",i,"男");
userList.add(u);

Collections.sort(userList,new UserCompare());
for(User user : userList)
System.out.println(user.toString());



排序的话直接用 Collections.sort(userList,new UserCompare());就可以了。

sql语句中如何进行日期比较?

datediff(d,需要比较的日期,getdate()),datediff返回两个日期之间的时间差,getdate()获取当天系统时间

PLSQL中SQL语句怎样转换日期型函数为字符型?

目前需求:需要selcet where ENDDATE<'2014/01/01'
其中:ENDDATE是一个日期的字段名,而后面的2014/01/01是我要转换的日期,目前查到在数据中ENDDATE的属性如图所示:

在数据库中查的ENDDATE的显示数据如图所示:

紧急求助,谢!!
需要知道使用什么函数,可以将后面的20140101转换,或者将掐面的日期转换成字符串的形式都可以吧?试过很多函数,都不能用。

to_char函数可以将日期值格式化为字符串; to_date函数将字符串按指定格式转换成日期值。
在查询中, 将'2014/01/01'转换成日期值,然后再用作查询条件,这样会比较好。
select ... where enddate < to_date('2014/01/01', 'yyyy/mm/dd')
参考技术A select * from table t where to_char(t.ENDDATE,'yyyy/mm/dd')<'2014/01/01
其中,to_char是将日期转化成字符串的函数;yyyy/mm/dd是指定的日期格式。
参考技术B where to_char(ENDDATE,'yyyy/mm/dd')<'2014/01/01'

这样试试

参考技术C to_char(ENDDATE,'yyyy/mm/dd')

以上是关于在SQL语句中怎样对varchar型别的列进行数值大小的比较的主要内容,如果未能解决你的问题,请参考以下文章

SQL Server中一个表中的一列为varchar型,长度12,啥语句可以在不满足12位前面补上”0“

Oracle字符类型与数值类型的转换

从数字到varchar的CAST返回指数值? [复制]

MySQL之字段数据类型和列属性

从EXCEL导入数据库数值型都被四舍五入了

sql语句问题 在一组数字前面加一个0