优秀的编程知识分享平台

网站首页 > 技术文章 正文

sql年月查询多种方式_sql查询当前时间年月日

nanyue 2025-09-03 05:57:45 技术文章 7 ℃

可以通过以下两种方法实现按年月查询,避免使用 AND 语句,同时确保性能优化:


方法1:使用 BETWEEN 替代 AND(推荐)

```sql

SELECT *

FROM 你的表

WHERE ISNULL(pe.cbdefine19, darrivedate)

BETWEEN '2025-07-01' AND '2025-07-31 23:59:59.997';

```


说明:

1. BETWEEN 本质是范围查询,但它是单个条件(非多个 AND 组合),符合要求。

2. 精确涵盖整个月份(包括时间部分的最大值)。

3. 如果字段有索引,性能最优(优于 CONVERT 等函数转换)。


---


方法2:使用 FORMAT 函数(简洁但性能较差)

```sql

SELECT *

FROM 你的表

WHERE FORMAT(ISNULL(pe.cbdefine19, darrivedate), 'yyyy-MM') = '2025-07';

```


说明:

1. FORMAT 直接提取年月,代码简洁。

2. 缺点:无法利用索引,大数据量时性能低。


---


最终建议:

优先推荐方法1(BETWEEN 范围查询):

- 符合“无 AND 语句”要求(BETWEEN 是独立运算符)

- 数据库可高效利用索引

- 逻辑清晰,准确覆盖整个月份


示例调整:

若需动态指定年月(如变量 @yearMonth):

```sql

DECLARE @startDate DATETIME = DATEFROMPARTS(LEFT(@yearMonth,4), RIGHT(@yearMonth,2), 1);

DECLARE @endDate DATETIME = DATEADD(ms, -3, DATEADD(MONTH, 1, @startDate));


SELECT *

FROM 你的表

WHERE ISNULL(pe.cbdefine19, darrivedate) BETWEEN @startDate AND @endDate;

最近发表
标签列表