【问题标题】:What is this SQL attempting to do? SELECT 202001%100这个 SQL 试图做什么?选择 202001%100
【发布时间】:2021-02-11 17:16:23
【问题描述】:

我在 SQL Server 2016 db 的 SELECT 语句中遇到过以下情况,以前从未见过像这样使用百分号:

SELECT 202001%100

我得到 1 的结果

尝试到处搜索,但似乎无法找出上例中 % 的用法。

有人可以帮忙吗?

【问题讨论】:

  • 这是什么数据库?
  • SQL Server 2016

标签: sql sql-server select


【解决方案1】:

% 符号是modulus operator。它为您提供了除法操作的余数。因为202001除以1002020,余数是1,那么202001模数100就是1

在这种情况下,看起来有人做出了非常糟糕的选择来将年/月值作为整数处理,并且正在使用模数来查找月份(一月) .这似乎适用于简单的事情,但它放弃了使用更高级的日期/时间函数的能力,并且让您容易受到使用实际日期值时解决的一些棘手的边缘情况的影响。

相反,最好使用正式的 DateTime 类型之一,将月份的第一天放在日期位置,即使您不关心这一天。

【讨论】:

  • 即取模运算符——返回值为取模数。
  • 不一定是年月,也可以是年-季/年-周数
  • @LukaszSzozda 是的。但这并没有改变处方:在每个时期的第一天使用一种正式的日期时间类型几乎总是更好。
  • 我倾向于使用当月的最后一天,这样EOMONTH 工作得很好,可惜没有SOMONTH 功能
  • 我的意思是它让我的生活更轻松,否则我不得不不断地编写愚蠢的datetimefromparts 函数。我只在group bys 中使用它。只需要记住它是一个月中最后一天的开始
猜你喜欢
  • 1970-01-01
  • 2012-11-16
  • 2011-01-18
  • 2011-04-15
  • 1970-01-01
  • 2011-04-17
  • 2018-07-15
  • 1970-01-01
  • 2021-10-10
相关资源
最近更新 更多