sql查询中的拆分字符串
在名为“Post”的表中,我在名为“Post”的字段中有一个名为“postingdate”的值,它是sql查询中的拆分字符串,sql,intersystems-cache,Sql,Intersystems Cache,在名为“Post”的表中,我在名为“Post”的字段中有一个名为“postingdate”的值,它是2009-11-2512:42AM IST格式的字符串 我需要查询以获取基于日期范围的详细信息。我尝试了以下查询,但它抛出了一个错误。请指导我解决此问题。提前谢谢 select postingdate from post where TO_DATE(postingDate,'YYYY-MM-DD')>61689 and TO_DATE(postingDate,'YYYY-MM-DD
2009-11-2512:42AM IST
格式的字符串
我需要查询以获取基于日期范围的详细信息。我尝试了以下查询,但它抛出了一个错误。请指导我解决此问题。提前谢谢
select postingdate
from post
where TO_DATE(postingDate,'YYYY-MM-DD')>61689
and TO_DATE(postingDate,'YYYY-MM-DD')<61691
选择发布日期
邮寄
截止日期(发布日期,'YYYY-MM-DD')>61689
在SQL Server中,您可以说
Select postingdate from post
where postingdate between '6/16/1969' and '6/16/1991'
如果它真的是一个字符串,那么幸运的是它是YYYY-MM-DD格式的。您可以将该格式作为字符串进行排序和比较,因为最重要的数字位于左侧。例如:
select *
from Posts
where StringDateCol between '2010-01-01' and '2010-01-02'
不需要将字符串转换为日期,以这种方式进行比较不受,12:42AM IST
附件的影响。当然,除非您的表包含来自不同时区的日期:)在对字符串运行日期范围查询之前,您需要将字符串转换为日期。如果您对时间部分不感兴趣,则可以不使用字符串
实际功能将取决于您的RDBMS
for strings only
select * from posts
where LEFT(postingDate,10) > '2010-01-21'
or
for datetime ( Sybase example)
select * from posts
where convert(DateTime,postingDate) between '2010-01-21' and '2010-01-31'
正如您现在看到的,尝试对表示日期的字符串列执行任何类型的查询都是一个问题。您有几个选择:
将postingdate列转换为某种日期或时间戳数据类型。我认为这是您的最佳选择,因为它将使使用此字段查询表更快、更灵活、更不容易出错
将postingdate保留为字符串,并在进行比较时使用函数将其转换回日期。这将是一个性能问题,因为除非您的数据库支持基于函数的索引,否则大多数查询将变成完整表扫描
将postingdate保留为字符串,并将其与其他字符串进行比较。这不是一个好的选择,因为很难找到一种这样做远程查询的方法,我想你已经发现了
如果是我,我会转换数据。祝你好运。你在使用什么RDBMS?Oracle、MySql、SQL Server还是其他?顺便说一下:你可能不应该在字符串字段中存储日期值。有一个日期类型。但是当我使用同一个日期时,我没有得到任何记录来获得一天,你会使用“2010-01-01”