最近 和一个同事一同开发一个电商项目 项目收尾写报表的时候 队友可把我坑惨了
首先是SQL SERVER DATENAME()这个方法的坑
再次是一个日期的性能问题

1.DATENAME(month,getdate())在数据库脚本运行环境为中文的时候返回01、02的数据,运行环境为英文的时候返回may这样的英文日期缩写

报表按月查询 界面大概就长这个样子 传去存储的参数:@time=‘202005’


既然只说时间的问题
定义一个订单表Orders如下:

CREATE TABLE [dbo].[Orders]([OrderID] [int] IDENTITY(1,1) NOT NULL,  --订单号[AddTime] [datetime] NULL  --订单时间
)

当时我们的开发环境和测试环境的数据库脚本执行语言是中文的 线上却是英文的
导致以下惨剧:
sql语句如下:

declare @time varchar(20)=‘202005’
select COUNT(*) from Orders
WHERE DATENAME(YEAR,AddTime)+DATENAME(MONTH,AddTime) =@time

开发环境数据库:


线上环境数据库:


坑爹啊 数据全挂了
后面试了下:

set language  'Simplified Chinese'
declare @time varchar(20)=‘202005’
select COUNT(*) from Orders
WHERE DATENAME(YEAR,AddTime)+DATENAME(MONTH,AddTime) =@time

把脚本的运行环境改为中文 但是返回特别卡
我以为这样设置不行 实际上是可以的(就是卡)
后面又换种写法:

declare @time varchar(20)='202005'
select COUNT(*) from Orders
--WHERE substring(CONVERT(varchar(100),AddTime, 112),0,7)=@time
WHERE RIGHT(CONVERT(varchar(100),AddTime, 112),6)=@time

但是还是超级卡 那就是性能问题了

2.把日期转为字符去比较的性能问题

把数据库的日期类型字段转成字符去比较性能会变的超级差 而且也利用不了索引 最后换成这种方法:

declare  @time varchar(20)='202005',@startTime varchar(50)=null,@endTime varchar(50)=nullSELECT @startTime= substring(@time,0,5)+'-'+substring(@time,5,2)+'-'+'01'
SELECT @endtime=CONVERT(VARCHAR(7),DATEADD(MONTH, 1, @startTime),121)+'-01'select COUNT(*) from Orders
WHERE  AddTime>@startTime and AddTime<@endTime

闪电一般的速度 完美解决队友的坑 也想解决我的坑队友

SQL DATENAME(month,getdate())返回的数据为英文日期及把日期转为字符去比较的性能问题相关推荐

  1. SQL数据库中的一列数据按照英文字母先后顺序排列,怎么可以做到?

    SQL数据库中的一列数据按照英文字母先后顺序排列,怎么可以做到?前提是一组人名,我的全是汉字呀 其实这个问题,我想多了,其实没那么复杂,一个简单的语句就能完成, 一般ORDER BY [F]就可以了 ...

  2. 【转】SQL函数:字符串中提取数字,英文,中文,过滤重复字符

    SQL函数:字符串中提取数字,英文,中文,过滤重复字符 --提取数字 IF OBJECT_ID('DBO.GET_NUMBER') IS NOT NULL DROP FUNCTION DBO.GET_ ...

  3. 原生sql 查询返回一个实体_python连接SQLServer执行给定的查询SQL语句,并返回结果数据...

    今天写这篇文章的初衷就是在我昨天发表的文章<Python连接SQLServer数据库执行增删改查操作>后,一些读者反馈说跟Python完全没有关系,这里我想说的是:内容的确是与Python ...

  4. java调用远程 接口_java通过url调用远程接口返回json数据

    java通过url调用远程接口返回json数据,有用户名和密码验证, 转自 https://blog.csdn.net/wanglong1990421/article/details/78815856 ...

  5. pandas 中DataFrame使用:数据标准化、数据分组、日期转换、日期格式化、日期抽取

    本文测试使用Pandas使用的是Spyder,python3.6版本,已经安装好pandas包.测试数据已放云盘:链接:https://pan.baidu.com/s/1zozpY2BUTIvEJKf ...

  6. sql查询返回xml数据之应用【转载】

    sql查询返回xml数据之应用[转载] 今天查看邮件,看到一标题Using the FOR XML Clause to Return Query Results as XML,点进去看了看,以前也是知 ...

  7. SQL查询最大值,返回整行数据

    SQL查询最大值,返回整行数据 1.问题 部分数据如下,未完整展示.如何从 table_a 表中查询 p_postions 列的最大值对应的一行数据? 2.解答 方法1:先排序,再取第一条 SELEC ...

  8. 如何仅从SQL Server DateTime数据类型返回日期

    SELECT GETDATE() 回报: 2008-09-22 15:24:13.790 我希望该日期部分没有时间部分: 2008-09-22 00:00:00.000 我该怎么办? #1楼 尝试这个 ...

  9. sql 基础语法 创建数据库和数据表 数据增删改查 分组查询 子查询回顾

    参考链接: SQL教程 MySQL教程 一.创建数据库语法 --用master数据库 use master --判断数据库是否存在,若存在则删除 if exists (select * from sy ...

最新文章

  1. 浅谈lambda表达式最通俗易懂的讲解
  2. 找出数组中出现次数超过一半的数
  3. 利用python进行统计分析的一些笔记(1)
  4. nginx自定义模块编写-实时统计模块--转载
  5. androidclient和站点数据交互的实现(基于Http协议获取数据方法)
  6. vim简单命令教程-firstblood
  7. 区块链组织架构_区块链可以加速开放组织的5种方式
  8. Qt Pro语法总结
  9. “混合云产业推进联盟”成立,ZStack实力助推
  10. map和json数组以及JSON对象和的区别以及相互转换
  11. Axure一些常用模板下载(免费模板)
  12. 机械制图与计算机绘图实训报告前言,《机械制图与计算机绘图》的课程标准.doc...
  13. html 各浏览器兼容性
  14. unity3d做俄罗斯方块
  15. 气候变化对深圳的影响
  16. 4家外国支持支付宝支付的域名注册商
  17. spring调用切面失效分析(类内调用自身切面方法或其他切面方法失效)
  18. 做网站懒得备案 海外云服务器你要懂得怎么选!
  19. 如何下载百度离线地图瓦片数据
  20. vsnprintf函数用法

热门文章

  1. 深入String类不可变特性
  2. 如何在execl表格中打对勾和叉叉?
  3. python求股票收益率_python – 有没有办法自动获取许多股票的一般信息,如市盈率,收益率等等?...
  4. 谷歌账户无法添加_如何将多个Google帐户添加到Google Home
  5. 介绍arxiv.org的文献更新管理工具arxiv-sanity
  6. 【深度学习】1-权重参数全相同值初始化,导致无法训练-python
  7. 介绍计算机说明文,介绍电脑的说明文作文300字
  8. H3C路由器交换机模拟器
  9. 半生颠沛流离,归来仍是少年。这人生啊,如梦!
  10. python控制excel降序排列_Python实现EXCEL表格的排序功能示例