簡體   English   中英

DATEADD為dd-MM-yyyy格式

[英]DATEADD in dd-MM-yyyy format

我使用的是SQL Server 2005,我從用戶處以dd-MM-yyyy格式獲取日期,限制為最多5天,因此用戶最多可以看到+ -5天的結果。

我嘗試了很多,但無法:

  1. dd-MM-yyyy轉換為yyyy-MM-dd
  2. 在SQL查詢中向dd-MM-yyyy添加天數

我的SQL查詢是:

 SELECT 
     (convert(varchar(10), OrderDate, 105)) AS OrderDate 
 FROM 
     [Products] p
 WHERE
     ((convert(varchar(10), OrderDate, 105)) BETWEEN
         (DATEADD(dd, -3, '22-01-2014'))
          AND
         (DATEADD(dd, 3, '22-01-2014'))
       )

在上面的查詢中,假設用戶輸入22-01-2014作為日期,輸入3作為flexibleDays (因此用戶可以看到從2014年1月19日到2014年1月25日的結果)。

如何在上述SQL查詢中以dd-MM-yyyy格式添加天數?

我建議不要過度使用日期在字符串之間的轉換! 如果將DATEDATETIME轉換為字符串-當然您不能在其中添加幾天-畢竟現在是字符串!

因此,如果您已經一個DATEDATETIME列,請使用它並將其數據類型保留下來!

嘗試編寫如下代碼:

-- define inputs from user - a date in string format, and a number of days
DECLARE @UserEntered VARCHAR(20) = '22-01-2014'
DECLARE @FlexiDays INT = 3

-- declare some helper variables - user input as DATE, from and to dates
DECLARE @UserEnteredDate DATE 

DECLARE @FromDate DATE
DECLARE @ToDate DATE

-- determine the DATE the user entered, and the resulting "From" and "To" dates (as DATE)
SELECT @UserEnteredDate = CONVERT(DATE, @UserEntered, 105)

SET @FromDate = DATEADD(DAY, -1 * @FlexiDays, @UserEnteredDate)
SET @ToDate = DATEADD(DAY, @FlexiDays, @UserEnteredDate)

-- do your query without any messy conversions!
SELECT 
     OrderDate
FROM 
     [Products] p
WHERE
     OrderDate BETWEEN @FromDate AND @ToDate

試試這個功能

CREATE FUNCTION SUBTRACT_DAYS( @date AS DATETIME, @days AS INT )
RETURNS DATETIME
BEGIN
  RETURN DATEADD(dd, -@days, @date);
END

CREATE FUNCTION ADD_DAYS(@date AS DATETIME, @days AS INT )
RETURNS DATETIME
BEGIN
  RETURN DATEADD(dd, +@days, @date);
END

SELECT dbo.SUBTRACT_DAYS('2014-01-22', 3),dbo.ADD_DAYS('2014-01-22', 3)

OP

Start                   End
2014-01-19 00:00:00.000 2014-01-25 00:00:00.000

嘗試這個:

DECLARE @UserEntered VARCHAR(20) = '22-01-2014'
DECLARE @FlexiDays INT = 3

DECLARE @UserEnteredDate DATE 

DECLARE @FromDate DATE
DECLARE @ToDate DATE

dates (as DATE)
SELECT @UserEnteredDate = CONVERT(DATE, @UserEntered, 105)

SET @FromDate = DATEADD(DAY, -1 * @FlexiDays, @UserEnteredDate)
SET @ToDate = DATEADD(DAY, @FlexiDays, @UserEnteredDate)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM