SQLServer数据库查询时间段如2013-1-1到2013-12-31出现2-9月数据漏掉,将其排序发现1月中间嵌入11月数据
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了SQLServer数据库查询时间段如2013-1-1到2013-12-31出现2-9月数据漏掉,将其排序发现1月中间嵌入11月数据相关的知识,希望对你有一定的参考价值。
在数据库中时间日期用的是varchar字段录入的数据如2013-2-2有少部分如2013年3月3日。查询时间段会出现漏数据,排序不正确。我想法是:1,将varchar转换为datetime语句 convert(datetime,列名)进行转换失败
。2,转换日期格式使之变为2013-02-02语句convert(varchar(10),列名,121)结果还是失败
。3,创建存储过程将varchar中的 ‘-’ 和年月日去掉转换为int型进行查询比较但不知道怎么将‘-’或年月日去掉
把年月日这种字转成横杠,然后再转datetime
select cast(replace(replace(replace(列名,\'日\',\'-\'),\'月\',\'-\'),\'年\',\'-\') as datetime) from 表名 参考技术A convert(datetime,replace(replace(replace(列,'年','-'),'月',‘’),'日',''),121)设计之初没考虑这些问题吗?本来日期就直接用日期类型的多好?建个索引检索数据也很方便,你这样子弄了,虽然可以通过系统函数来解决转换问题,但索引就用不上了,到底图了个啥?追问
公司只有一个技术员,他这么做估计是为了方便其他人数据录入什么的。
以上两行查询都会出现如下提示
消息 242,级别 16,状态 3,第 1 行从 varchar 数据类型到 datetime 数据类型的转换产生一个超出范围的值。
以上是关于SQLServer数据库查询时间段如2013-1-1到2013-12-31出现2-9月数据漏掉,将其排序发现1月中间嵌入11月数据的主要内容,如果未能解决你的问题,请参考以下文章
C# 中不同数据库(如 Oracle 和 SQL Server)之间的 Sql 查询 [关闭]