Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在MS SQL中设置日期的通配符查询格式?_Sql_Sql Server_Date_Formatting - Fatal编程技术网

如何在MS SQL中设置日期的通配符查询格式?

如何在MS SQL中设置日期的通配符查询格式?,sql,sql-server,date,formatting,Sql,Sql Server,Date,Formatting,我有一个特定的日期范围,比如说8-01到8-08。我还有一个数据库,其中有1975-2014年的历史数据。日期的格式为yyyy-mm-dd格式。例如,今天是2014-08-06。如何获取8-01至8-08年所有年份的历史记录?请记住,我的日期范围可能不会很好地跨越同一个月。另一个例子是7/31至8/07 基本上,我希望能够在(%-8-01和%-8-08)之间执行,其中%是通配符。但是,通配符似乎与MS SQL中的日期对象不兼容。我需要将日期转换为字符串吗?获得独立于年份的通用月日范围的最有效方法

我有一个特定的日期范围,比如说8-01到8-08。我还有一个数据库,其中有1975-2014年的历史数据。日期的格式为yyyy-mm-dd格式。例如,今天是2014-08-06。如何获取8-01至8-08年所有年份的历史记录?请记住,我的日期范围可能不会很好地跨越同一个月。另一个例子是7/31至8/07

基本上,我希望能够在(%-8-01和%-8-08)之间执行,其中%是通配符。但是,通配符似乎与MS SQL中的日期对象不兼容。我需要将日期转换为字符串吗?获得独立于年份的通用月日范围的最有效方法是什么


谢谢。

通配符运算符不能在BEVERY语句中使用。这真的只适用于类似的语句。如果你想修改你的年份,就这样,你应该把它作为一个参数传入。BEVER语句将毫无问题地接受这一点。

您可以提取月份和日期部分,并比较它们:

where
month(<yourdate>) = 8
and day(<yourdate>) between 1 and 8
在哪里
月份()=8
第()天介于1和8之间

请注意,如果您在此列上有索引,您将不会以这种方式使用它。

这与我的另一个答案不同。它将使所有日期的年份均为
1900
。然后你只需要在你选择的日期之间拿任何东西

DECLARE @StartMonth INT
DECLARE @Month INT
DECLARE @EndMonth INT
DECLARE @StartDay INT
DECLARE @Day INT
DECLARE @EndDay INT

SET @StartMonth = 8
SET @EndMonth = 8
SET @StartDay = 1
SET @EndDay = 8

IF @EndMonth > @StartMonth
BEGIN  
    @Month = @EndMonth 
    @StartMonth = @EndMonth
    @EndMonth= @Month 
END
IF @EndDay > @StartDay 
BEGIN  
    @Day= @EndDay 
    @StartDay = @EndDay 
    @EndDay = @Day
END

SELECT *
FROM   TABLE
WHERE  MONTH(dateField) BETWEEN @StartMonthAND @EndMonth 
       AND DAY(dateField) BETWEEN @StartDay AND @EndDay 
SELECT *
FROM   Table1
WHERE  DATEADD
       (
           year,
           -DATEDIFF(year,'19000101',dateField),
           dateField
       ) BETWEEN'19000801' AND'19000818'

您不需要转换为字符串,请尝试以下操作:
SELECT*FROM Table,其中DATEPART(MONTH,Table.Date)=8,DATEPART(DAY,Table.Date)介于1和8之间
如果日期跨越多个月,则会出现问题。。。但感谢您的洞察力。只需在…中使用
month(date)