2015-06-24 33 views
0

我有一個場景,其中有一個批號,並且需要驗證批號中的日期與今天的日期相同。我可以從批號中提取日期,但問題是用於指示日期的批號部分是「27.03」或「2703」。這一年沒有顯示。如何將其轉換爲我可以用來驗證的日期? PS。我正在使用SQL Server 2012提取並轉換批號的日期,但日期信息沒有年

謝謝。

+0

批號中的「2703」部分是日期的DDMM部分,即3月27日? – robdjc

+0

是的。謝謝。 – Abinash

+0

數據庫中是否會有超過一年的批號?另外,批號是否有兩種格式,一種是「DD.MM」,另一種是「DDMM」? – robdjc

回答

0

不知道我是否可以在沒有更多信息的情況下完全回答問題。您可以嘗試使用SQL Server中的當前日期構造DDMM值,然後在where子句中使用該值。

例如,您可以使用以下方法獲取ISO標準日期(112 = yyyymmdd)。更多信息here

select CONVERT(nvarchar(8),getdate(),112) 
從上面YYYYMMDD日期

然後,你可以得到的DDMM值,並在使用它有類似以下條款的內容:

DECLARE @ddmmValue CHAR(6) 

SET @ddmmValue='%'+ SUBSTRING(CONVERT(nvarchar(8),getdate(),112),5, 2) + 
        SUBSTRING(CONVERT(nvarchar(8),getdate(),112),7, 2) + '%' 

select * from MyTest 
    where BatchNumber like @ddmmValue 

這也取決於什麼其餘的批號看起來像。

+0

謝謝。我使用了REPLACE語句如下: ------ SET BatchDate1 = SUBSTRING(Scan,6,4) SET DateNow1 = REPLACE(CONVERT(varchar(5),GETDATE(),103),' /」,‘’) IF BatchDate1 <> DateNow1 ------ 並且是,批處理代碼有時是‘DDMM’或‘DD.MM’,但它總是具有唯一的起始字符會告訴你日期格式是什麼,所以我首先驗證了這一點,然後驗證了日期。再次感謝。 – Abinash

0

也許你可以利用你已有的東西並追加一年,然後使用德國日期格式轉換爲日期類型。我假設你希望你的日期不遲於今天的日期。

select 
    case 
     when convert(
      date, 
      batch_num + '.' + cast(year(current_timestamp) as char(4)), 
      104 
     ) > cast(current_timestamp as date) 
     then dateadd(
      yy, 
      -1, 
      convert(
       date, 
       batch_num + '.' + cast(year(current_timestamp) as char(4)), 
       104 
      ) 
     ) 
     else 
      convert(
       date, 
       batch_num + '.' + cast(year(current_timestamp) as char(4)), 
       104 
      ) 
    end 
... 

或者幾乎相當於...

select 
    dateadd(
     yy, 
     case 
      when convert(
       date, 
       batch_num + '.' + cast(year(current_timestamp) as char(4)), 
       104 
      ) > cast(current_timestamp as date) 
      then -1 
      else 0 
     end, 
     convert(
      date, 
      batch_num + '.' + cast(year(current_timestamp) as char(4)), 
      104 
     ) 
    ) 

或者,如果你只是希望比較當前日期和處理日期和月份之間的可選時間段(後我重新讀你的問題)...

where 
    cast(
     date, 
     replace(stuff(batch_num, 3, 0, '.'), '..', '.') + 
      '.' + cast(year(current_timestamp) as char(4)), 
     104 
    ) = cast(current_timestamp as date) 
+0

謝謝。是的 - 我只需要與今天的日期進行比較,以便將當前日期理想地轉換爲工作值。但我確實按照建議使用了REPLACE語句。 ------ SET BatchDate1 = SUBSTRING(掃描,6,4) SET DateNow1 = REPLACE(CONVERT(VARCHAR(5),GETDATE(),103), '/', '') IF BatchDate1 <> DateNow1 ------ 批處理代碼總是有一個獨特的起始字符,告訴你日期格式是什麼,所以我首先驗證了這一點,然後再驗證日期。再次感謝。 – Abinash

0

謝謝。我用REPLACE語句如下:


SET BatchDate1 = SUBSTRING(掃描,6,4) SET DateNow1 = REPLACE(CONVERT(VARCHAR(5),GETDATE(),103), '/', 「」)

IF BatchDate1 <> DateNow1


是的,批次碼有時是「DDMM」或「DD.MM」,但它總有一個唯一的起始字符會告訴你什麼日期格式是我首先驗證,然後是日期。再次感謝。