Sql 如何仅从存储在varchar中的字符串中筛选日期
我以以下方式将值存储在SQL Server中:Sql 如何仅从存储在varchar中的字符串中筛选日期,sql,sql-server,Sql,Sql Server,我以以下方式将值存储在SQL Server中:02-Jul-12 12:00:00 AM这里的时间和分、秒可以是任何类似于02-Jul-12 12 12:15:52 PM,02-Jul-12 6:02:12 AM的值 我希望有一个where条件,它将忽略时间,并根据如下日期获取数据where some_date='02-Jul-12' 我该怎么做 SELECT * FROM dbo.tbl_MyTable WHERE REPLACE(CONVERT(VARCHAR(9), Date
02-Jul-12 12:00:00 AM
这里的时间和分、秒可以是任何类似于02-Jul-12 12 12:15:52 PM
,02-Jul-12 6:02:12 AM
的值
我希望有一个where条件,它将忽略时间,并根据如下日期获取数据where some_date='02-Jul-12'
我该怎么做
SELECT * FROM dbo.tbl_MyTable
WHERE
REPLACE(CONVERT(VARCHAR(9), DateTimeValueColumn, 6), ' ', '-')='02-Jul-12'
或
在代码中的chage不是使用getdate函数voncet,而是使用datetime格式的datestring并进行比较。下面的查询将适用于您
SELECT * FROM dbo.tbl_MyTable
WHERE
CAST(CONVERT(CHAR(10), DateTimeValueColumn, 102) AS DATE) =
CAST(CONVERT(CHAR(10),GETDATE(),102) AS DATE)
或
在代码中的chage不是使用getdate函数voncet,而是使用datetime格式的datestring并进行比较。下面的查询将适用于您
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
见此帖:
但在WHERE子句中,最好在日期之间搜索,如下所示:
DECLARE @startDate DATETIME = '02-Jul-2012'
DECLARE @endDate DATETIME = DATEADD(DAY, 1, @startDate)
SELECT * FROM [table] WHERE [some_Date] BETWEEN @startDate AND @endDate
如果您使用的是SQL2008或更高版本,则可以将
DATETIME
转换为DATE
见此帖:
但在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。这使得日期对于排序和比较(“工作”、“工作之间”以及“相等”)非常有用 要提取日期,可以使用
left(datestr,10)
。在您的格式中,您将使用:
where left(datestr, 9) = '01-Jan-13'
如果将字段存储为datetime
或smalldatetime
,则可能认为它们存储为字符串。事实并非如此。它们存储为自某个特定日期起的天数,而日期部分存储为小数天。如果您使用的是SQL Server 2005或更高版本,那么最好的方法是:
where cast(datetime as date) = '2013-01-01' -- I recommend ISO formats, even for constants. '20130101' is even better
如果将日期存储为字符(不推荐使用),则至少应使用ISO格式:YYYY-MM-DD hh:MM:ss。这使得日期对于排序和比较(“工作”、“工作之间”以及“相等”)非常有用 要提取日期,可以使用
left(datestr,10)
。在您的格式中,您将使用:
where left(datestr, 9) = '01-Jan-13'
如果将字段存储为datetime
或smalldatetime
,则可能认为它们存储为字符串。事实并非如此。它们存储为自某个特定日期起的天数,而日期部分存储为小数天。如果您使用的是SQL Server 2005或更高版本,那么最好的方法是:
where cast(datetime as date) = '2013-01-01' -- I recommend ISO formats, even for constants. '20130101' is even better
选择具有今天日期(而非时间)的行的步骤
选择具有今天日期(而非时间)的行的步骤
不应为
datetime
字段使用字符串参数。存储在SQL Server中的数据是否位于varchar(或其他基于字符的)字段中?这是你的问题。在datetime字段中存储日期/时间。数据类型实际上是char/varchar还是datetime?如果它是varchar,而您不想将其更改为date,请使用像。。。我已将SQL置于应答器中。您不应该对datetime
字段使用字符串参数。存储在SQL Server中的数据位于varchar(或其他基于字符的)字段中?这是你的问题。在datetime字段中存储日期/时间。数据类型实际上是char/varchar还是datetime?如果它是varchar,而您不想将其更改为date,请使用像。。。我已经把SQL放在一个答案里了,我没有否决你的答案。我总是感谢为回答这个问题所做的努力。当投反对票时,人们应该给出这样做的理由。我总是感谢为回答这个问题所做的努力。当向下投票时,人们应该给出这样做的理由。OP提到“日期”字段的类型为varchar
。这对varchar(日期在OP中格式化时)适用。OP提到“日期”字段的类型为varchar
。这对varchar(日期在OP中格式化时)适用