Ii 以下列方式将值存储在 SQL Server 中:02-Jul-12 12:00:00 AM
这里是时间和分钟,秒可以是任何值02-Jul-12 12:15:52 PM
,02-Jul-12 6:02:12 AM
依此类推。
我想要一个 where 条件,它将省略时间并根据日期获取数据,如下所示where some_Date='02-Jul-12'
我该怎么做?
Ii 以下列方式将值存储在 SQL Server 中:02-Jul-12 12:00:00 AM
这里是时间和分钟,秒可以是任何值02-Jul-12 12:15:52 PM
,02-Jul-12 6:02:12 AM
依此类推。
我想要一个 where 条件,它将省略时间并根据日期获取数据,如下所示where some_Date='02-Jul-12'
我该怎么做?
SELECT * FROM whatever WHERE some_Date LIKE '02-Jul-12%';
SELECT * FROM dbo.tbl_MyTable
WHERE
REPLACE(CONVERT(VARCHAR(9), DateTimeValueColumn, 6), ' ', '-')='02-Jul-12'
或者
代码中的 chage 不是使用 getdate 函数 voncert 你日期时间格式的日期字符串,并比较这个后续查询对你有用
SELECT * FROM dbo.tbl_MyTable
WHERE
CAST(CONVERT(CHAR(10), DateTimeValueColumn, 102) AS DATE) =
CAST(CONVERT(CHAR(10),GETDATE(),102) AS DATE)
如果您使用的是 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
如果您将日期存储为字符(不建议这样做),您至少应该使用 ISO 格式:YYYY-MM-DD hh:mm:ss。这使得日期对排序和比较有用(“<”有效,“>”有效,“between”有效以及等于)。
要提取日期,您可以使用left(datestr, 10)
. 在您的格式中,您将使用:
where left(datestr, 9) = '01-Jan-13'
如果您将字段存储为datetime
or smalldatetime
,您可能会认为它们存储为字符串。他们不是。它们存储为自某个特定日期以来的某些天数,而天数部分存储为小数天。如果您使用的是 SQL Server 2005 或更高版本,那么最好的方法是:
where cast(datetime as date) = '2013-01-01' -- I recommend ISO formats, even for constants. '20130101' is even better
选择具有今天日期(不是时间)的行
select * from myTable where datediff(dd, dateColumn, getdate()) = 0