查询在 SQL 中比较日期



我有一个表格,上面有11月发生的日期。我写了这个查询

select id,numbers_from,created_date,amount_numbers,SMS_text 
from Test_Table
where 
created_date <= '2013-04-12'

此查询应返回第 11 个月(11 月)发生的所有事情,因为它发生在日期"2013-04-12"(12 月)之前

但它只返回在小于 04 的天数内发生的可用日期 (2013-04-12

会不会只是比较一天的部分? 而不是整个日期?

如何解决这个问题?

Created_date的类型为 date

日期格式默认为 yyyy-dd-MM

> 不要使用"2013-04-12",其含义取决于当地区域性,而是使用"20130412",它被认为是区域性不变格式。

如果要与12月4日进行比较,则应写"20131204"。如果要与4月12进行比较,则应写"20130412"。

从 SQL Server 的文档编写国际事务处理 SQL 语句一文介绍了如何编写区域性不变的语句:

使用其他 API 或事务处理 SQL 脚本、存储过程和触发器的应用程序应使用未分隔的数字字符串。例如,yyyymmdd 作为19980924。

编辑

由于使用的是 ADO,因此最佳选择是参数化查询并将日期值作为日期参数传递。这样,您可以完全避免格式问题,并获得参数化查询的性能优势。

更新

要在文字中使用 ISO 8601 格式,必须指定所有元素。引用日期时间文档的 ISO 8601 部分

要使用 ISO 8601 格式,必须指定格式中的每个元素。这还包括格式中显示的 T、冒号 (:) 和句点 (.)。

。第二个分量的分数是可选的。时间部分以 24 小时格式指定。

像这样尝试

select id,numbers_from,created_date,amount_numbers,SMS_text 
from Test_Table
where 
created_date <= '2013-12-04'

如果您仅与日期谷进行比较,则将其转换为日期(而不是日期时间)将起作用

select id,numbers_from,created_date,amount_numbers,SMS_text 
 from Test_Table
 where 
 created_date <= convert(date,'2013-04-12',23)

此转换也适用于使用 GetDate() 函数

-- 根据@Thomas853的建议更新演员表

请尝试以下查询

select id,numbers_from,created_date,amount_numbers,SMS_text 
from Test_Table
where 
convert(datetime, convert(varchar(10), created_date, 102))  <= convert(datetime,'2013-04-12')

你输入<=,它也会捕捉到给定的日期。您只能将其替换为<

将它们转换为相同格式的日期,然后您可以进行比较。 像这样:

where convert(date, created_date,102) <= convert(date,                                  /*102 is ANSI format*/
                                                    substring('2013-04-12',1,4) + '.' + /*year*/
                                                    substring('2013-04-12',9,2) + '.' + /*month*/
                                                    substring('2013-04-12',6,2)         /*day*/
                                                ,102)

日期格式为 yyyy-mm-dd。所以上面的查询是寻找早于 12Apr2013 的记录

建议您通过将日期

字符串设置为"2013-04-30"来进行快速检查,如果没有sql错误,则日期格式确认为yyyy-mm-dd。

尝试在

日期前后使用"#",并确保系统日期格式。 也许"YYYYMMDD O YYYY-MM-DD O MM-DD-YYYY O 使用'/O \' "

前任:

 select id,numbers_from,created_date,amount_numbers,SMS_text 
 from Test_Table
 where 
 created_date <= #2013-04-12#
您也可以

使用 to_char(column_name, 'YYYY-MM-DD) 来更改格式

以下查询可用于查找 2013 年 11 月的记录。

Select id,numbers_from,created_date,amount_numbers,SMS_text 
from Test_Table
where Month(created_date) = 11 and Year(created_date) = 2013

对于我对 MS Access 的查询,我可以使用以下语法比较日期:

SELECT COUNT(orderNumber) AS Total
FROM Orders
WHERE orderDate >=#2003/04/01#
AND orderDate <=#2003/06/30#;

其中输出是 2003-04-01 和 2003-06-30 之间的订单数。

相关内容

  • 没有找到相关文章

最新更新