我有一個場景,其中有一個批號,並且需要驗證批號中的日期與今天的日期相同。我可以從批號中提取日期,但問題是用於指示日期的批號部分是「27.03」或「2703」。這一年沒有顯示。如何將其轉換爲我可以用來驗證的日期? PS。我正在使用SQL Server 2012提取並轉換批號的日期,但日期信息沒有年
謝謝。
我有一個場景,其中有一個批號,並且需要驗證批號中的日期與今天的日期相同。我可以從批號中提取日期,但問題是用於指示日期的批號部分是「27.03」或「2703」。這一年沒有顯示。如何將其轉換爲我可以用來驗證的日期? PS。我正在使用SQL Server 2012提取並轉換批號的日期,但日期信息沒有年
謝謝。
不知道我是否可以在沒有更多信息的情況下完全回答問題。您可以嘗試使用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
這也取決於什麼其餘的批號看起來像。
謝謝。我使用了REPLACE語句如下: ------ SET BatchDate1 = SUBSTRING(Scan,6,4) SET DateNow1 = REPLACE(CONVERT(varchar(5),GETDATE(),103),' /」,‘’) IF BatchDate1 <> DateNow1 ------ 並且是,批處理代碼有時是‘DDMM’或‘DD.MM’,但它總是具有唯一的起始字符會告訴你日期格式是什麼,所以我首先驗證了這一點,然後驗證了日期。再次感謝。 – Abinash
也許你可以利用你已有的東西並追加一年,然後使用德國日期格式轉換爲日期類型。我假設你希望你的日期不遲於今天的日期。
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)
謝謝。是的 - 我只需要與今天的日期進行比較,以便將當前日期理想地轉換爲工作值。但我確實按照建議使用了REPLACE語句。 ------ SET BatchDate1 = SUBSTRING(掃描,6,4) SET DateNow1 = REPLACE(CONVERT(VARCHAR(5),GETDATE(),103), '/', '') IF BatchDate1 <> DateNow1 ------ 批處理代碼總是有一個獨特的起始字符,告訴你日期格式是什麼,所以我首先驗證了這一點,然後再驗證日期。再次感謝。 – Abinash
謝謝。我用REPLACE語句如下:
SET BatchDate1 = SUBSTRING(掃描,6,4) SET DateNow1 = REPLACE(CONVERT(VARCHAR(5),GETDATE(),103), '/', 「」)
IF BatchDate1 <> DateNow1
是的,批次碼有時是「DDMM」或「DD.MM」,但它總有一個唯一的起始字符會告訴你什麼日期格式是我首先驗證,然後是日期。再次感謝。
批號中的「2703」部分是日期的DDMM部分,即3月27日? – robdjc
是的。謝謝。 – Abinash
數據庫中是否會有超過一年的批號?另外,批號是否有兩種格式,一種是「DD.MM」,另一種是「DDMM」? – robdjc