sqlserver2000中字符串类型的日期如何比较大小

来源:互联网 发布:新加坡经济数据 编辑:程序博客网 时间:2024/04/29 05:44

如果在数据库(sql)中将保存日期的字段的数据类型设置为varchar,而你又需要对这个日期和另外一个日期进行比较,那么该怎么办呢?
第一种方法

很容易想到,就是纯粹地利用字符串来比较大小,比如有一个字段为vote_time,其数据类型为varchar,要比较这个日期是不是大于某个日期,比如"2006-02-23",那么可以直接写:
where vote_time>'2006-02-23'
,这中方法很直观,当然也需要在格式上有所规范,比如,如果日期是200633日,就必须将日期保存为2006-03-03,否则比较的时候容易出错。

第二种方法:使用类型转换函数convert()

1首先说明不需要类型转换,并可以正确比较的情况

如果只是比较varchar类型的时间值与日期类型的值比较

   

 

select * from voter where vote_time>getdate()会自动转换varchardatetime类型(2009-2-27转换为2009-02-27),并进行比较,所以2009-1-15并为出现在结果集中

第一种情况下,之所以没有正确是因为系统认定'2006-02-23'为字符串,所以进行的比较是按照比较两个字符串的大小进行的,依次按位比较

 

2、如果是varchar类型的时间值,按照时间先后排序,则需要转换varchardatetime后再排序

转换前

 

 

转换格式前排序时,时间2007-02-28 06:30:000实际比2007-2-27 06:30:000迟,但是却排在了前面。转换后

 

 

 

结果已经是按照实际时间的先后顺序从早到晚排序了

注:插入的varchar时间值必需是合法的(如2009-2-30就是不合法的日期,2月没有30号)否则,转换时会有错误: char 数据类型到 datetime 数据类型的转换导致 datetime 值越界。输入日期的时候,可以选择使用日期控件,这样就不会输入不存在的日期了

原创粉丝点击