我有一个表格,上面有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 之间的订单数。