如何仅从存储在varchar中的字符串中过滤日期

时间:2013-01-07 14:03:18

标签: sql sql-server

Ii以下列方式存储在SQL Server中的值:02-Jul-12 12:00:00 AM此处的时间和分钟,秒可以是02-Jul-12 12:15:52 PM02-Jul-12 6:02:12 AM等等。

我希望有一个where条件,它将省略时间并根据日期获取数据,如下所示where some_Date='02-Jul-12'

我该怎么做?

5 个答案:

答案 0 :(得分:3)

SELECT * FROM whatever WHERE some_Date LIKE '02-Jul-12%';

答案 1 :(得分:1)

 SELECT * FROM dbo.tbl_MyTable
    WHERE 
 REPLACE(CONVERT(VARCHAR(9), DateTimeValueColumn, 6), ' ', '-')='02-Jul-12'

代码中的chage而不是使用getdate函数voncert你是dateline格式的datestring并做比较这个跟随查询将适合你

SELECT * FROM dbo.tbl_MyTable
WHERE 
CAST(CONVERT(CHAR(10), DateTimeValueColumn, 102) AS DATE) = 
            CAST(CONVERT(CHAR(10),GETDATE(),102) AS DATE)

答案 2 :(得分:1)

如果您使用的是SQL2008或更高版本,则可以将DATETIME转换为DATE

请参阅此帖子:http://blog.sqlauthority.com/2012/09/12/sql-server-get-date-and-time-from-current-datetime-sql-in-sixty-seconds-025-video/

但是在WHERE子句中,最好在日期之间进行搜索,如下所示:

DECLARE @startDate DATETIME = '02-Jul-2012'
DECLARE @endDate DATETIME = DATEADD(DAY, 1, @startDate)

SELECT * FROM [table] WHERE [some_Date] BETWEEN @startDate AND @endDate

答案 3 :(得分:1)

如果您将日期存储为字符 - 不建议使用 - 您至少应使用ISO格式:YYYY-MM-DD hh:mm:ss。这使得日期对于排序和比较非常有用(&#34;&lt;&#34;工作,&#34;&gt;&#34;工作,&#34;&#34;工作以及等于)。< / p>

要提取日期,您可以使用left(datestr, 10)。在您的格式中,您将使用:

where left(datestr, 9) = '01-Jan-13'

如果您将字段存储为datetimesmalldatetime,您可能会认为它们存储为字符串。他们不是。它们存储在某个特定日期以来的某些天数,日期部分存储为小数天。如果您使用的是SQL Server 2005或更高版本,那么最好的方法是:

where cast(datetime as date) = '2013-01-01'  -- I recommend ISO formats, even for constants.  '20130101' is even better

答案 4 :(得分:1)

选择包含今天日期(而不是时间)的行

select * from myTable where datediff(dd, dateColumn, getdate()) = 0