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 数据类型的转换产生一个超出范围的值。

参考技术B convert vachar数据到datetime数据类型时要指定数据格式 convert(datetime,列名,格式)

以上是关于SQLServer数据库查询时间段如2013-1-1到2013-12-31出现2-9月数据漏掉,将其排序发现1月中间嵌入11月数据的主要内容,如果未能解决你的问题,请参考以下文章

sqlserver 查询时间表问题..

如何用把Oracle中的数据插入到sqlserver中?

C# 中不同数据库(如 Oracle 和 SQL Server)之间的 Sql 查询 [关闭]

sqlserver 在数据查询时是按时间顺序排列的 在时间字段上还有必要加聚集索引吗 为啥

sql server 算出当前时间的前多少分钟

sql server和oracle中查询结果返回指定行数的语句