mysql sql dateadd_sql数据库dateadd

mysql sql dateadd_sql数据库dateadd最好避免在 where 子句中的列上运行函数 因为这会削弱数据库使用索引的能力 假设您的表中有 200 万行 其中 100 条是从 2020 年 2 月开始的 并且 date 列已建立索引 数据库可以优化查询 例如 WHEREdateBET 2020 02 01 AND 2020 02 29 使用索引并只检索它知道的那 100 行 但是它不能做到 WHEREYEAR date 2020ANDMONT

最好避免在where子句中的列上运行函数,因为这会削弱数据库使用索引的能力。假设您的表中有200万行,其中100条是从2020年2月开始的,并且date列已建立索引。数据库可以优化查询,例如WHERE date BETWEEN ‘2020-02-01’ AND ‘2020-02-29’使用索引并只检索它知道的那100行,但是它不能做到WHERE YEAR(date) = 2020 AND MONTH(date) = 2这一点:在后一种情况下,它只需要访问全部200万行,每行需要调用两个函数行(slooow),查找相同的100行

如果要获取当月的数据,则应改用以下方法:

SELECT *

FROM table

WHERE datecolumn >= @startDate AND dateColumn < @endDate

然后让Java为@startDate和@endDate参数计算出固定的常数(为什么?因为它使代码更灵活;如果将当前月份编码为SQL,则以后无法再使用相同的代码来查询当前年份)。 )

至少,如果要将这种逻辑编码到SQL中,请仅将函数用于比较日期的常量:

SELECT *

FROM table

WHERE

–add (1 minus the current day number) to get to start of month

datecolumn >= DATEADD(day, 1-DAY(getutcdate()), CAST(getutcdate() as date)) AND

–add 1 day to result of EOMONTH function to get constant for end of the month

datecolumn < DATEADD(DAY, 1, EOMONTH(getutcdate()))

注意:您没有指定要使用的数据库,所以我猜到了SQLServer并使用@形式的参数名。它不会更改此处的核心信息,即“在where子句中不要对表数据使用函数”

回答来源:Stack Overflow

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/211977.html原文链接:https://javaforall.net

(0)
上一篇 2026年3月18日 下午9:08
下一篇 2026年3月18日 下午9:08


相关推荐

  • IntellIJ IDEA 配置 Maven和修改默认Repository

    IntellIJ IDEA 配置 Maven和修改默认Repository

    idea 2021年10月2日
    62
  • SQL Where 字符串拼接「建议收藏」

    SQL Where 字符串拼接「建议收藏」declare@svarchar(100)set@s=’1,2,3′–法一:select*fromtbwherecharindex(‘,’+ltrim(id)+’,’,’,’+@s+’,’)>0–法二:exec(‘select*fromtbwhereidin(‘+@s+’)’)转载于:https://www.cnblo…

    2022年6月20日
    97
  • C++ atof函数

    C++ atof函数atof 函数 功能 将字串转换成浮点型数相关函数 atoi atol strtod strtol strtoul 表头文件 include 定义函数 doubleatof constchar nptr 函数说明 nbsp nbsp nbsp nbsp nbsp nbsp atof 会扫描参数 nptr 字符串 跳过前面的空格字符 直到遇上数字或正负符号才开始做转换 而再遇到非数字或

    2026年3月9日
    2
  • opencv在电脑屏幕上画_opencv平滑处理?opencv 画实心圆?OpenCV繪圖的實作-cvCircle,cvEllipse,cvElli…

    opencv在电脑屏幕上画_opencv平滑处理?opencv 画实心圆?OpenCV繪圖的實作-cvCircle,cvEllipse,cvElli…你是否正在寻找关于cvcircle的内容?让我把最吸引人的东西奉献给你:转自:OpenCV繪圖的實作-cvcircle,cvEllipse,cvEllipseBox圓的製作,要給他目標圖片,圓心座標,半徑,其他參數等.cvcircle()函式的實作#include#includeIplImage*Image1;CvPointCircleCenter;intRadius;CvScalar…

    2022年7月24日
    13
  • C语言八皇后冲突问题

    C语言八皇后冲突问题1449 八皇后的冲突问题时限 1000ms nbsp 内存限制 10000K nbsp 总时限 3000ms 描述八皇后问题是在 8 8 的国际象棋的棋盘上放置 8 个皇后 有多少种不同的放置方法 要求它们互相都不冲突 冲突是指在某一行或者某一列或者某一条斜线上出现两个皇后 因为这两个皇后可以互相吃掉对方 其中行号和列号都从 0 开始 现在前三行 0 2 行 每行一个皇后已经放置好的情况下 第 3 行的皇后想要放在给定

    2026年3月19日
    2
  • Java线程池面试题

    1、什么是线程池2、常见线程池

    2022年4月3日
    46

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号